我知道Class定义===了测试对象是否是该类的实例.
现在的问题是为什么true只评估Class左手操作数.
例:
'a' === String #false
Run Code Online (Sandbox Code Playgroud)
和
String === 'a' #true
Run Code Online (Sandbox Code Playgroud)
要么
def Foo
end
f = Foo.new
f === Foo #false
Foo === f #true
Run Code Online (Sandbox Code Playgroud)
Ama*_*dan 10
因为
String === 'a'与String.===('a')调用相同,调用Class#===,继承自Module#===测试参数是否继承自接收模块; 和
'a' === String是为相同的'a'.===(String),它调用String#===,从继承Object#===来测试参数是否等于接收器对象.
换句话说,===不对称; Object#===并且Module#===是非常不同的方法.还有Regexp#===,Proc#===...也做了非常不同的事情,也是非对称的(与模式匹配,用参数执行).
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |