为什么MyObject.new.class === MyObject评估为false?

时间:2011-12-16 20:27:27

标签: ruby equality

我执行以下操作,并评估为false

MyObject.new.class === MyObject

然而,

MyObject.new.class == MyObject

评估为true。有更多Ruby背景的人可以向我解释这个问题吗?如果可以将==用于此目的吗?

1 个答案:

答案 0 :(得分:15)

在Ruby中,===不是==的更严格版本,就像在其他一些语言中一样。

===方法有几个含义:

成员:

(1..10) === 5       # => true

测试参数是否是接收者的实例:

p MyObject.new.class === MyObject.new  # true; it's the same as 
p MyObject.new.is_a? MyObject

正则表达匹配:

/\w+/ === "Ruby"

案例陈述:

year = 2011

case year
when 1901..2000
  puts 'Second millennium'
when 2001..2999
  puts 'Third millennium'
end

其他含义,请参阅ri ===

MyObject.new.class == MyObject只是一个正常的相等测试(MyObject是一个类对象,而MyObject.new.class是同一个类对象)