11

私は次のような機能を持っています:

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

私の質問は、最初の比較がtrueであっても、Rubyはすべての比較を実行するので、関数はtrueを返すのでしょうか。私のチェックははるかに集中的であるため、毎回すべてのチェックを行わないようにするために、これを別の方法で分割する必要があるかどうかを知りたいと思います。

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

ありがとうございました。

4

5 に答える 5

16

Rubyは短絡評価を使用します。

これは両方に適用されます|| と &&。

  • 左のオペランドが真で||ある場合、右のオペランドは評価されません。
  • 左のオペランドが偽の場合、&&右のオペランドは評価されません。
于 2011-03-11T21:11:48.533 に答える
5

||最初の条件が真になるとすぐに短絡します。そうです、最後に最も高価な条件を設定すると役立ちます。

于 2011-03-11T21:12:10.360 に答える
2

|| はデフォルトで短絡評価を行います。つまり、最初の「真」の式に遭遇すると、評価を停止します (すべての式を「or」演算子で評価することを明示的に指定しない限り)。

参照:

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

于 2011-03-11T21:14:18.830 に答える
0

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

于 2011-03-11T21:11:30.067 に答える
0

次のように、irb で自分でテストできます。

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

私たちが知っているように、関数pはそのパラメーターを(あるinspect方法で)出力してから返します。したがって、||短絡の場合は のみ"Hello"が出力され、そうでない場合は"Hello"との両方"World"が出力されます。

いつものように の代わりにを使用して、論理&&演算子をテストすることもできます。putspputsnil

ところで、irb は ruby​​ をいじるのに最適な場所です。並行性のごく一部を除いて、そこですべてをテストできます。

于 2015-03-05T09:49:00.103 に答える