2012-01-26 13 views
0

あなたがこれを行う場合:Rubyでは、なぜ!nil return => true?

$ nil 
    => nil 

をしかし、あなたがこれを行う場合:!

$ !nil 
    => true 

をなぜnilの本当ですか?そのため、一般的な、比較にはnilがとみなされている

+1

これ以外に何ができますか? 'true'は非偽の値の最も合理的な候補です。それは定義から来ます。 – sawa

+2

あなたは何をすると思いましたか? –

答えて

13

あなたはRubyでオブジェクト上!などのブール演算子を使用すると、オブジェクトが最初にブール値(trueまたはfalse)に、舞台裏で、変換する必要があります。 Rubyのすべてのオブジェクトは「真実」または「偽」のいずれかであり、Rubyの実装者はnilが偽であると選択したため、!nil!falseと等価であり、trueと評価されます。

+3

式として使用したときに「真であると評価する」または「偽と評価する」と言う方が簡単でしょう。 '!!'を使って物事をブール値にすることができます。 '!nil'は' true'で、 '!! nil'は' false'です。 – tadman

1

、そう、あなたが行う場合:

if something_that_returns_nil 
    puts "did not return nil" 
else 
    puts "returned nil" 

をあなたはそれがあった場合、それは逆の挙動を有することを期待する:

if !something_that_returns_nil 
    puts "did return nil" 
else 
    puts "did not return nil" 

したがって、 "反転"しない場合は、not_being_nilを表す特定のオブジェクトがないため、falseになります(nilはRubyの値ではありません)。

4

!演算子は単項論理値ではありません。オペランドがnilまたはfalseの場合、trueを返します。それ以外の場合は、falseが返されます。ブール式Rubyで

!nil # => true 
!false # => true 
!Object.new # => false 

常にtrueとしてnilfalsefalseなど、すべての残りの値を検討してください。

関連する問題