У меня есть встроенная строка, которая не выполняет то, что я думала, и я для ясности перевела ее в пример консоли.
Я думала, что встроенная строка синтаксически совпадает сстрока if, но похоже, что это не так.
foo = "chunky"
(bar1 = foo) if (!defined?(bar1) && foo)
bar1
В этом случае bar1 заканчивается на nil.Если я реструктурирую его на
foo = "chunky"
if !defined?(bar2) && foo
bar2 = foo
end
bar2
, то это сработает - для bar2 установлено значение "коренастый" (во втором примере я использовал bar2 вместо bar1, чтобы убедиться, что я использовал неопределенную переменную в каждом случае).
Это тот случай, когда inline, если всегда устанавливает что-то в bar1, по умолчанию nil?Я думал, что он просто не оценил часть перед if, если if проверяет ложь.