为什么变量在“if false”出现时被声明?

时间:2014-09-11 09:10:10

标签: ruby variables

我发现很难理解以下变量是如何设置为nil的,而它似乎没有分配到任何地方。

我在ruby 2.1.2ruby 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

1 个答案:

答案 0 :(得分:0)

Ruby在解析器级别处理分配。来自documentation

  

解析器遇到局部变量时会创建局部变量   分配,而不是在分配发生时:

a = 0 if false # does not assign to a

p local_variables # prints [:a]

p a # prints nil