2016-11-07 1 views
1

私は、チュートリアルを使用しています、そしてそれは、このような条件があります。Rubyブーリアンでは、等価文がないかどうかチェックしていますか?

if Restaurant.method1 
    puts "XXX" 
elsif Restaurant.method2 
    puts "YYY" 
end 

どちらの方法がtrueまたはfalseのブール値を返します。私は正確にあなたが何も等号演算子(==)または代入演算子(=)がないことを考慮するためにチェックしているか疑問に思って

if x 
    puts "XXX" 
else 
    puts "YYY" 
end 

:同様に、変数のために、私は似た何かを見たことがありますか?論理的に私の頭の中でこれを考えているので、おそらくRubyの単純な性質によって隠されている何らかの等価性チェックがなければなりません。もしIf If xとIf If Restaurant.methodはどちらも本当に意味をなさない何らかのチェックなしで条件付きです。

+0

これはまったく同じことです。 'if Restaurant.method1'は、メソッド' method1'を呼び出す戻り値が真偽であるかどうかを 'if 2 == 3'でチェックし、' == 'メソッドを呼び出す戻り値がtrueであるかどうかをチェックします。 'a '<=' b''ならば、' <= 'メソッドを呼び出す戻り値が真実かどうかをチェックします。なぜそれがメソッドの名前で何か違いを生むのだろうか? –

+0

私は正確に何を確認しているのだろうと思っていた。 '== true'(これは本当のことを意味すると信じています)がなければ、x /メソッド名がどういう場合に直感的に知ることができません。 – developer098

+0

しかし、 '=='は単なるメソッドであり、*正確には 'method1'のようなものです。名前を除いて、2つの間にゼロ差があります。だから、まったく同じ2つの違いがあるのはなぜですか? 'if'式の条件の中で一つのメソッドを呼び出すのは、なぜ別のメソッドを呼び出すのと違うのですか? 'a == b 'の場合、' == 'メソッドを呼び出す戻り値は真実性がチェックされます。 'a.foo(b)'の場合、 'foo'メソッドを呼び出す戻り値は真実性がチェックされます。 –

答えて

5

これはプログラミングで共通のパラダイムであり、Rubyの抽象化ではありません。何か真実であるかどうかを確認しています。特にルビーでは、falsenil以外はすべて真実です。あなたはこれをテストしたい場合は、あなたのコンソールにそれを自分で試してみてください。

!!1 # => true 
!!0 # => true 
!![] # => true 
!!{} # => true 

...など、

!!false # => false 
!!nil # => false 

重要な注意事項に対し:これはRubyのための唯一のケースです。他の言語には異なるルールがあります。たとえば、一部の言語では0が偽です。早期に新しい言語を学ぶときにこれらを学ぶことが重要です。

+1

ああ、どちらの場合でも、Restaurant.methodとxが真であるかどうかを評価していますか? Restaurant.methodの場合、戻り値を介してtrueを返すかどうかを調べ、xの場合は、falseとnil以外の値に設定されているかどうかを確認します。 – developer098

+1

真実であるかどうかは「真」ではありません(ただし、「真」も真実です)。たとえば、 'true == 0#=> false'のようになります。 '0'は真実ではありません。真実です。つまり、if文、三項演算子などを使って強制すると真であると評価されます。これはRubyの面倒なことではありません。 2つの偽の値。物事の軽いものが虚偽で、あなたがいくつかの問題にぶつかるjavascriptを取る。 – Damon

+1

Lol haha​​ ... "真実"正しい...笑それはかなり面白いですが、OK ...真実=偽でもなくても偽ではありません。 – developer098

1

Rubyには "truthy"ステートメントがあります。つまり、複数のものが真であると評価することができます。 Rubyの中のすべては、nilとfalseを除いて真です。

関連する問題