爲什麼下面的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