Эти две части кода визуально похожи, но существенно различаются по назначению. Первое звучит так:
# Run object.some_value and capture the result into a
if a = object.some_value
# ...
end
Вторая читается так:
# If a is equivalent to the result of object.some_value
if a == object.some_value
# ...
end
Где это сравнение в силу ==
.
Форма захвата часто используется в различных случаях, иногда буквально case
, например, когда вы захватываете результат неуклюжего и / или медленного фрагмента кода:
case (name = professor.name.to_s.split(/\s+/).last)
when "O'Reilly", "Berners-Lee"
puts "Prof. %s is invited to the party." % name
else
puts "Prof. %s is not invited to the party."
end
Где это =
является преднамеренным назначением, так что вы можете ссылаться на name
с этого момента, а не пересчитывать этот кусок.