为什么下面的ruby代码返回“”而不是“代码为空”?这个ruby case语句为什么会产生意想不到的结果?
code = ""
case code
when code.empty?
"Code is empty"
else
code
end
为什么下面的ruby代码返回“”而不是“代码为空”?这个ruby case语句为什么会产生意想不到的结果?
code = ""
case code
when code.empty?
"Code is empty"
else
code
end
您的代码进行比较,以code
code.empty?
,即,code == code.empty?
的结果,这是错误的。字符串可以降级为布尔值,但'' == true
的显式相等将评估为false
。
表达式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
啊,当然..谢谢 – noli 2011-03-10 07:49:51