我期待以下代码段:
var = "Not Empty" unless defined? var
var # => nil
返回
"Not Empty"
,但是我得到了nil
。为什么会发生这种情况的任何见解? 最佳答案
这是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)