我所期待的是以下代码片段:
var = "Not Empty" unless defined? var
var # => nil返回"Not Empty",但我得到了nil。对为什么会发生这种情况有什么见解吗?
发布于 2015-09-29 16:09:25
这是Ruby中仅有的几个我称之为真正的WTF的时刻之一。
你必须使用
unless defined? var
var = :value
end使用后缀语法,解释器将在内部对值进行nil-ify,以便可以对变量进行推理,从而在检查完成之前对其进行定义:
# Doesn't print anything
unless defined?(foo) and (p(foo) or true)
foo = :value
end
# Prints nil
bar = :value unless defined?(bar) and (p(bar) or true)发布于 2015-09-29 16:08:57
局部变量在解析时定义(作为nil)。var2的定义在该条件之前。这使得即使在不执行赋值的情况下也会定义var2。然后,该条件评估定义了var2,这将保留var2的值nil。
https://stackoverflow.com/questions/32838805
复制相似问题