为什么这个ruby case语句会产生意想不到的结果?

时间:2011-03-10 07:44:33

标签: ruby

为什么以下ruby代码返回“”而不是“Code is empty”?

code = ""
case code
when code.empty?
  "Code is empty"
else
  code
end

2 个答案:

答案 0 :(得分:5)

因为您的代码正在将codecode.empty?进行比较,即code == code.empty?的结果,这是错误的。字符串可以降级为布尔值,但'' == true的显式相等将计算为false

答案 1 :(得分:3)

表达式code.empty?是一个方法调用,它调用返回值empty?的方法true。然后使用表达式truecode值与true === code变量进行比较,该值为false,因此它会执行else代码块。

这可能是你想要的:

case code
when ""
  "Code is empty"
else
  code
end

更简单的方法是使用三元运算符:

code.empty? ? "Code is empty" : code