あなたがこれを行う場合:Rubyでは、なぜ!nil return => true?
$ nil
=> nil
をしかし、あなたがこれを行う場合:!
$ !nil
=> true
をなぜnilの本当ですか?そのため、一般的な、比較にはnilが偽とみなされている
あなたがこれを行う場合:Rubyでは、なぜ!nil return => true?
$ nil
=> nil
をしかし、あなたがこれを行う場合:!
$ !nil
=> true
をなぜnilの本当ですか?そのため、一般的な、比較にはnilが偽とみなされている
あなたはRubyでオブジェクト上!
などのブール演算子を使用すると、オブジェクトが最初にブール値(true
またはfalse
)に、舞台裏で、変換する必要があります。 Rubyのすべてのオブジェクトは「真実」または「偽」のいずれかであり、Rubyの実装者はnil
が偽であると選択したため、!nil
は!false
と等価であり、true
と評価されます。
式として使用したときに「真であると評価する」または「偽と評価する」と言う方が簡単でしょう。 '!!'を使って物事をブール値にすることができます。 '!nil'は' true'で、 '!! nil'は' false'です。 – tadman
、そう、あなたが行う場合:
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の値ではありません)。
!
演算子は単項論理値ではありません。オペランドがnil
またはfalse
の場合、true
を返します。それ以外の場合は、false
が返されます。ブール式Rubyで
!nil # => true
!false # => true
!Object.new # => false
常にtrue
としてnil
とfalse
false
など、すべての残りの値を検討してください。
これ以外に何ができますか? 'true'は非偽の値の最も合理的な候補です。それは定義から来ます。 – sawa
あなたは何をすると思いましたか? –