我知道Class定义===
来测试是否
对象是该类的一个实例。
现在的问题是,只有当true
是左手操作数时,才会评估为Class
。
示例:
'a' === String #false
和
String === 'a' #true
或
def Foo
end
f = Foo.new
f === Foo #false
Foo === f #true
答案 0 :(得分:10)
由于
String === 'a'
与String.===('a')
相同,后者调用Class#===
,继承自Module#===
以测试参数是否继承自接收器模块;以及
'a' === String
与'a'.===(String)
相同,后者调用String#===
,继承自Object#===
以测试参数是否等于接收者对象。
换句话说,===
不对称; Object#===
和Module#===
是非常不同的方法。还有Regexp#===
,Proc#===
...也做了非常不同的事情,也是非对称的(与模式匹配,用参数执行)。