Я не понимаю код в документации Ruby, который присваивает значение в выражении if - PullRequest
0 голосов
/ 14 мая 2019

Документация Ruby гласит:

if a = object.some_value #assigns a value
  # do something to a
end

Но при запуске приведенного выше кода я получаю предупреждение:

warning: found = in conditional, should be ==

Что подразумевает, что пример должен быть:

if a == object.some_value
  # do something to a
end

Можно присвоить значение переменной в if, как показано выше?

1 Ответ

2 голосов
/ 14 мая 2019

Эти две части кода визуально похожи, но существенно различаются по назначению. Первое звучит так:

# 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 с этого момента, а не пересчитывать этот кусок.

...