是否有任何特殊原因導致類中的===和==方法的實作方式不同Class?
"".class == String
#=> true
"".class === String
#=> false
uj5u.com熱心網友回復:
我認為我們可以進一步簡化您的問題。我相信你問的是為什么
String == String # true
但
String === String # false
我認為 Ruby 是半一致的。=== 相等性詢問右側是否是左側的成員。
所以
Class === String
是真的,因為 String 是 Class 的成員。事實上,String 不是 String 的成員。
我確實覺得奇怪的是
5 === 5 # returns true
Imo 它應該回傳 false 以與回傳 false 的 String === String 保持一致,但是對于原始 Ruby 有這個怪癖,可能所以它適用于 case 陳述句。
uj5u.com熱心網友回復:
(稱為“案例質量”)的目標===是在case陳述句中使用。創作者決定===使用is_a?forModule實體化別名最適合常見場景,例如:
def do_sth(object)
case object
when :nothing then ...
when String then ...
when Hash then ...
else ...
end
===應該(幾乎)永遠不要在case陳述句之外顯式使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474202.html
