这段代码没有像我预期的那样执行:
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。