Первым делом код:
class A def foo :method_value end def bar foo = :variable_value if false foo end end
Если мы используем локальную переменную с таким же именем как и метод, то
метод перекрывается ею. В приведённом коде я ожидал возврата :method_value
,
т.к. мы не используем переменную foo
. Метод bar
возвращает nil
.
Забавно, правда?
Переиначил приведённый выше пример, но получил тот же результат:
class A def foo :method_value end def bar if false foo = :variable_value end foo end end
Наверное эта «фича» находится в родственных связях с багом описанном в весёлом WAT видео:
1.9.2p290 :001 > a NameError: undefined local variable or method `a' for main:Object 1.9.2p290 :002 > b NameError: undefined local variable or method `b' for main:Object 1.9.2p290 :003 > a = b NameError: undefined local variable or method `b' for main:Object 1.9.2p290 :004 > a => nil
После того как мы просто попытались использовать необъявленные переменные одна из них магическим образом объявилась.
WAT?