我对变量定义很感兴趣。我知道变量定义,只是为了了解它是如何工作的。这个想法是如果未定义 myvar 则将其设置为 0。我不想使用 false,因为 false 或 nil 可能会返回 false。
def foo
myvar=1000
myvar = ((defined? myvar)==nil) ? 0 : myvar
puts myvar
end
foo # => 1000
但
def foo
# myvar=1000
myvar = ((defined? myvar)==nil) ? 0 : myvar
puts myvar
end
foo # => nil
但
def foo
mybool = ((defined? myvar)==nil)
myvar = mybool ? 0 : myvar
puts myvar
end
foo # => 0 it rocks !
这就像布尔测试是否在评估最终测试之前影响到 myvar 。
((defined? myvar)==nil)
给出了定义的 2 种可能性?myvar 可能是nil
,或者 test 的右侧nil
可能是nil
(it's nil
)。
为了摆脱这个测试的 nil 部分,我尝试了这段代码:
def foo
mylocalvariable = 2 # it gives 'local-variable' and not nil
puts ((defined? myvar) == (defined? mylocalvariable ))
myvar = ((defined? myvar)!=(defined? mylocalvariable )) ? 0 : myvar
puts myvar
end
foo # => nil
似乎测试的第一部分受到了 myvar 的影响,但是赋值运算符出现在 () 或比较运算符之后。你有想法吗?我不想要其他代码,只是为什么它会这样工作。谢谢你。