两个相似的句子有不同的行为。好吗?

时间:2013-02-15 12:32:46

标签: ruby initialization

两个相似的句子有不同的行为。好吗?

比较:

a = 123 unless defined? a
a # => nil

但......

unless defined? b
  b = 123
end
b # => 123

1 个答案:

答案 0 :(得分:2)

是的,这是正确的行为。在分配之前,使用nil创建并初始化局部变量。所以这段代码

a = 123 unless defined? a
a # => nil

粗略等同于

a = nil
a = 123 unless defined? a # `a` is not undefined anymore.
a # => nil

另一个例子(即使在此行之前未定义c,此代码也不会抛出NameError)。

c = 2 unless c # => 2