このコードは、期待どおりに機能しません。
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を使用できるようにしたいと思います。