为什么以下ruby代码返回“”而不是“Code is empty”?
code = ""
case code
when code.empty?
"Code is empty"
else
code
end
答案 0 :(得分:5)
因为您的代码正在将code
与code.empty?
进行比较,即code == code.empty?
的结果,这是错误的。字符串可以降级为布尔值,但'' == true
的显式相等将计算为false
。
答案 1 :(得分:3)
表达式code.empty?
是一个方法调用,它调用返回值empty?
的方法true
。然后使用表达式true
将code
值与true === code
变量进行比较,该值为false,因此它会执行else
代码块。
这可能是你想要的:
case code
when ""
"Code is empty"
else
code
end
更简单的方法是使用三元运算符:
code.empty? ? "Code is empty" : code