27

ruby の三項演算子を使用すると、単純な if else 構造に対して次のロジックを記述できます。

a = true  ? 'a' : 'b' #=> "a"

しかし、これを次のように書きたい場合はどうすればよいif foo 'a' elsif bar 'b' else 'c'でしょうか。

次のように書くこともできますが、従うのは少し難しいです。

foo = true
a = foo  ? 'a' : (bar ? 'b' : 'c') #=> "a"

foo = false
bar = true
a = foo  ? 'a' : (bar ? 'b' : 'c') #=> "b"

このようなシナリオを処理するためのより良いオプションはありますか? または、if..elsif..else ロジックを 1 行に凝縮したい場合、これが最善の策ですか?

4

4 に答える 4

51
a = (foo && "a" or bar && "b" or "c")

また

a = ("a" if foo) || ("b" if bar) || "c"
于 2012-12-12T21:25:10.937 に答える
19

Github Ruby スタイルガイドでは、簡単な if/else ステートメント用に 1 つのライナーを予約し、入れ子になった三項演算子を避けることを推奨しています。キーワードを使用できますthenが、悪い習慣と見なされます。

if foo then 'a' elsif bar then 'b' else 'c' end

制御ステートメントが複雑すぎる場合は、ケース (Ruby のスイッチ演算子) を使用できます。

于 2012-12-12T21:26:41.787 に答える
5

a = if foo then 'a' elsif bar then 'b' else 'c' end

于 2012-12-12T21:25:39.163 に答える
3

次のように書くこともできます。

x = if foo then 'a' elsif bar then 'b' else 'c' end

ただし、これはRubyの慣用的なフォーマットではありません。

于 2012-12-12T21:23:06.820 に答える