Nom*_*man 10 ruby local-variables postfix-notation
我期待以下片段:
var = "Not Empty" unless defined? var
var # => nil
Run Code Online (Sandbox Code Playgroud)
回来"Not Empty",但我得到了nil.任何洞察为什么会发生这种情况?
ndn*_*kov 10
这是Ruby中我称之为实际WTF的唯一时刻之一.
你必须使用
unless defined? var
var = :value
end
Run Code Online (Sandbox Code Playgroud)
使用postfix语法,解释器将在内部nil对值进行处理,以便它可以推断变量,从而在检查完成之前定义它:
# 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)
Run Code Online (Sandbox Code Playgroud)