2011-03-11 8 views
9

私は、次のような機能を持っている:||演算子は、結果がわかったときに戻りますか?

def check 
    return 2 == 2 || 3 != 2 || 4 != 5 
end 

私の質問は、Rubyは最初は本当であっても、すべての比較を行うため、関数はtrueを返します、です。私の小切手ははるかに集中しているので、毎回すべての小切手を作ることを避けるために、これを別の方法で破るべきかどうかを知りたいと思います。

irb(main):004:0> 2 == 2 || 3 != 2 || 4 != 5 
=> true 

ありがとうございます。

+2

Btw:あなたのメソッドに 'return'は必要ありません。 – sepp2k

答えて

0

条件の1つが真であるとすぐに、関数が戻ります。

11

Rubyはshort-circuit evaluationを使用します。

これは、||および& &。

  • ||の場合、左側のオペランドが真実である場合、右側のオペランドは評価されません。
  • &&の場合、左側のオペランドが偽であれば、右側のオペランドは評価されません。
5

||最初の条件が真であるとすぐに短絡します。そう、はい、それは最後に最も高価な条件を置く場合に役立ちます。

2

||デフォルトで短絡評価が行われます。つまり、最初の「真」の式に遭遇すると、評価を停止します(明示的にすべての式を 'または'演算子で評価したい場合を除きます)。

参照:

http://en.wikipedia.org/wiki/Short-circuit_evaluation

0

あなたはこのように、IRBでそれを自分でテストすることができます。

irb> p('Hello') || p('World') 

を我々は機能pは(inspect的に)そのパラメータを出力します知っているように、その後リターンしたがって、の短絡の場合は、"Hello"のみが出力されます。そうでない場合は、"Hello""World"の両方が出力されます。 putsは常にnilを返すよう

また、代わりにpputsを使用することにより、論理&&演算子をテストすることができます。

ところで、irbはルビーの周りで遊ぶのに最適な場所です。同時実行のわずかな部分を除いて、すべてをテストできます。

関連する問題