2

Rubyの条件文で複数またはオプションを表現するにはどうすればよいですか? 私はこのようなものがうまくいくと思ったが、うまくいかない:

1 == (3 || 2 || 1)
(1 == (3 || 2 || 1))

それらはtrueを返すと思いました。

物事のグループのいずれかが真である場合に真を返すと言う方法が必要です。長い道のりを綴る必要がありますか?

if (1 == 3 || 1 == 2 || 1 == 1)

英語で言うと

1 が 3、2、または 1 の場合、true を返します。

4

4 に答える 4

5

はい、それはそれを行う 1 つの方法です。より Rubyesque は次のようになります。

if [3, 2, 1].include?(1)

1 == (3 || 2 || 1)機能しない理由(3 || 2 || 1)は、最初に評価されるためです。演算子は、最初の||値が真の場合は最初の値を返し、最初の値が偽の場合は 2 番目の値を返します。

ですから、あなたは比較していますが、これ(3 || 2 || 1)は明らかにです。31 == 3false

于 2013-01-18T23:45:41.210 に答える
1

includeメソッドはあなたが望むことをします。また、あなたがany?望むものをかなりうまく表現する方法を使うことができます:

[1, 2, 3].any? { |v| 1 == v }

しかし、平等のためにあなたはただ使うことができますinclude

于 2013-01-18T23:54:11.317 に答える
1

テストする値が連続していない場合Array#include?は、 を選択することをお勧めします。

テスト値が連続しており、Rangeとして表現できる場合は、次を使用できます。

Range#cover?
Range#include?
Range#member?

例えば:

(1..3).member?(1) # => true

include?member?おそらくもう少し一般的で、 Enumerable で定義されているため、任意のコレクション オブジェクト、またはそこから派生したクラスに適用できます。Enumerable はany?、この質問に対する別の回答で使用される とnone? およびも定義しますone?

于 2013-01-18T23:55:01.733 に答える
0

case when条件は複数のオプションをサポートしています。

x = 1
puts case x
  when 1, 2, 3 then "Low"
  when 4, 5, 6 then "High"
  else "Strange dice..."
end
#=>Low
于 2013-01-22T21:31:35.167 に答える