这段代码没有像我预期的那样执行:
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
子句的 lambda 没有被调用。我知道无论子句===
的主题是什么,都应该调用大小写相等运算符。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。