我发现很难理解以下变量是如何设置为nil
的,而它似乎没有分配到任何地方。
我在ruby 2.1.2
和ruby 1.8.7
中尝试了此操作。两者都产生相同的结果。
这是怎么回事?
irb(main):002:0> foo
NameError: undefined local variable or method `foo' for main:Object
irb(main):003:0> if false
irb(main):004:1> foo = 1
irb(main):005:1> end
irb(main):006:0> foo
=> nil
答案 0 :(得分:0)
Ruby在解析器级别处理分配。来自documentation:
解析器遇到局部变量时会创建局部变量 分配,而不是在分配发生时:
a = 0 if false # does not assign to a p local_variables # prints [:a] p a # prints nil