两个相似的句子有不同的行为。好吗?
比较:
a = 123 unless defined? a
a # => nil
但......
unless defined? b
b = 123
end
b # => 123
答案 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