このコードは、期待どおりに機能しません。
case
when -> { false } then "why?"
else "This is what I expect"
end
# => "why?"
これもしません
case
when ->(x) {false} then "why?"
else "This is what I expect"
end
# => "why?"
最初のthen
句はどちらの場合も実行されます。これは、when
句に提供するラムダが呼び出されていないことを意味する必要があります。===
節の主語が何であれ、大文字小文字の等式演算子を呼び出す必要があることを理解していwhen
ます。===
に引数が指定されていない場合、反対側はどうなるのでしょうかcase
。私はそれがそうかもしれないと思っていましたnil
、しかしそれはそうすることができません:
-> {false} === nil
# => ArgumentError: wrong number of arguments (1 for 0)
->(x) {false} === nil
# => false
これは期待どおりに実行され、実行された場合、期待したcase
結果または例外が発生します。誰かが上記の結果を説明できますか?大文字小文字の等式演算子はまったく使用されていないようですが、最初のwhen
句はに評価されていtrue
ます。ところで、私はこれを行っています。なぜなら、aの出力はcase
変数の代入に使用でき、いくつかのelsif
句があるよりも言葉が少ないからです。Proc
引数のないcaseステートメントで任意のsを使用できるようにしたいと思います。