===如何在ruby中工作?

sty*_*ane -5 ruby

我知道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#===...也做了非常不同的事情,也是非对称的(与模式匹配,用参数执行).