Ruby的“foo = true if if!defined?foo || foo.nil?”不行

时间:2010-09-23 04:19:45

标签: ruby

我想在下面,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

有关

1 个答案:

答案 0 :(得分:3)

跳过括号时要小心。你的意思是:

foo = true if !defined?(foo) || foo.nil?

根据您的其他问题,defined?(foo)始终为true,所以您真的想写:

foo = true if foo.nil?