===如何在ruby中工作?

时间:2015-04-02 04:31:34

标签: ruby

我知道Class定义===来测试是否 对象是该类的一个实例。

现在的问题是,只有当true是左手操作数时,才会评估为Class

示例:

'a' === String #false

String === 'a' #true

def Foo
end

f = Foo.new
f === Foo #false
Foo === f #true

1 个答案:

答案 0 :(得分:10)

由于

  • String === 'a'String.===('a')相同,后者调用Class#===,继承自Module#===以测试参数是否继承自接收器模块;以及

  • 'a' === String'a'.===(String)相同,后者调用String#===,继承自Object#===以测试参数是否等于接收者对象。

换句话说,===不对称; Object#===Module#===是非常不同的方法。还有Regexp#===Proc#=== ...也做了非常不同的事情,也是非对称的(与模式匹配,用参数执行)。