Следующее оставляет foo
как ноль.
foo = true unless defined?(foo) #Leaves foo as nil
Это потому, что Ruby создает переменную foo
и присваивает ей значение nil, когда она читает (я думаю, что синтаксический анализ) бит foo = true
и затем, когда он читает (выполняя, я думаю) unless defined?(foo)
, он говорит, что foo
определен (он определен как ноль), и, следовательно, не выполняет часть foo = true
.
Если бы вы сделали
unless defined?(foo)
foo = true
end
, вы бы получили foo
в значении true.
Я добавил это в О каких рубиновых ошибках следует предупредить новичка? , потому что кто-то запутался в этом здесь .
Так что да, в некоторых обстоятельствах это может иметь значение.