Rubyでは、次のことを行う方法があるかどうか疑問に思っていました。
私は基本的に4つの可能な結果のマトリックスを持っています:
A is True, B is True
A is True, B is False
A is False, B is True
A is False, B is False
これについては、可能な限りクリーンな「ルビーの方法」でテストを作成したいと思います。
私は次のようなことをしたいと思っていました
case[A,B]
when A && B then ...
when A && !B then ...
when !A && B then ...
when !A && !B then ...
end
...しかし、それは機能しません。それで、この種の状況を処理するための最良の方法は何ですか?
ブールの場合(case
に式がない場合、最初のブランチをtruthywhen_expr
で返します):
result = case
when A && B then ...
when A && !B then ...
when !A && B then ...
when !A && !B then ...
end
一致する場合(case
の式を使用すると、述語when_expr === case_expr
を満たす最初のブランチが返されます):
result = case [A, B]
when [true, true] then ...
when [true, false] then ...
when [false, true] then ...
when [false, false] then ...
end
条件が1つで、マッチャーが複数あるケースを探している場合。
case @condition
when "a" or "b"
# do something
when "c"
# do something
end
..それならあなた実際にはこれが必要です:
case @condition
when "a", "b"
# do something
when "c"
# do something
end
これは次のように書き直すことができます
case @condition
when ("a" and "b")
# do something
when "c"
# do something
end
しかし、これはと同等であるため、やや直感に反します
if @condition == "a" or @condition == "b"
標準のRubyの方法があるかどうかはわかりませんが、いつでも数値に変換できます。
val = (a ? 1 : 0) + (b ? 2 : 0)
case val
when 0 then ...
when 1 then ...
when 2 then ...
when 3 then ...
end
またはprocの配列の配列を持っていて
my_procs[a][b].call()