2010-09-23 8 views
1

Je pensais que dans ce qui suit, foo doit être vraiRuby's "foo = true if! Defined? Foo || foo.nil?" ne fonctionne pas

$ irb 

ruby-1.9.2-p0 > foo = true if !defined? foo || foo.nil? 
=> nil 

ruby-1.9.2-p0 > foo 
=> nil 

parce que foo était dans un premier temps pas défini, mais la partie foo = true rendre temporairement a une valeur nulle, de sorte que le !defined n'a pas pris il, mais le foo.nil? devrait l'attraper, et le rendre vrai ... mais pourquoi est-il encore nul?

cela est lié à Ruby's "foo = true if !defined? foo" won't work as expected

Répondre

3

Soyez prudent lorsque vous sauter entre parenthèses. Vous vouliez dire:

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

Selon votre autre question, le defined?(foo) sera toujours true, si vraiment vous voulez écrire:

foo = true if foo.nil? 
Questions connexes