我想在下面,foo应该是真的
$ irb
ruby-1.9.2-p0 > foo = true if !defined? foo || foo.nil?
=> nil
ruby-1.9.2-p0 > foo
=> nil
因为foo最初没有被定义,但是foo = true
部分使它暂时具有nil值,因此!defined
没有捕获它,但是foo.nil?
应该捕获它,并使它成为现实...但为什么它仍然是零?
这与Ruby's "foo = true if !defined? foo" won't work as expected
有关答案 0 :(得分:3)
跳过括号时要小心。你的意思是:
foo = true if !defined?(foo) || foo.nil?
根据您的其他问题,defined?(foo)
始终为true
,所以您真的想写:
foo = true if foo.nil?