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

Top*_*gio 2 ruby equality

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

MyObject.new.class === MyObject
Run Code Online (Sandbox Code Playgroud)

然而,

MyObject.new.class == MyObject
Run Code Online (Sandbox Code Playgroud)

评估为true.有更多Ruby背景的人可以向我解释一下,如果可以==用于此目的吗?

Mar*_*oda 15

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

===方法有几个含义:

会员:

(1..10) === 5       # => true
Run Code Online (Sandbox Code Playgroud)

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

p MyObject.new.class === MyObject.new  # true; it's the same as 
p MyObject.new.is_a? MyObject
Run Code Online (Sandbox Code Playgroud)

正则表达式匹配:

/\w+/ === "Ruby"
Run Code Online (Sandbox Code Playgroud)

案例陈述:

year = 2011

case year
when 1901..2000
  puts 'Second millennium'
when 2001..2999
  puts 'Third millennium'
end
Run Code Online (Sandbox Code Playgroud)

其他含义,见 ri ===

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