Почему MyObject.new.class === MyObject оценивается как ложное? - PullRequest
2 голосов
/ 17 декабря 2011

Я делаю следующее, и оно оценивается как false:

MyObject.new.class === MyObject

Тем не менее,

MyObject.new.class == MyObject

оценивается как true. Может ли кто-нибудь с немного большим опытом работы с Ruby объяснить мне это, и если можно использовать == для этой цели?

1 Ответ

15 голосов
/ 17 декабря 2011

В 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"

Операторы Case:

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 - это тот же объект класса)

...