==
используется для равенства в условных операторах, таких как if
, , если
и т. Д. ===
используется для определения равенства в case
заявления.
Оба являются просто методами, вызываемыми для объектов. Это означает, что объекты решают, что что значит. Однако в Ruby есть соглашения о том, чем они отличаются. Обычно ==
строже, чем ===
- a === b
будет почти всегда истинным, если a == b
есть. Лучше всего об этом прочитать http://ruby-doc.org/core/classes/Object.html . Прокрутите вниз до различных разделов, посвященных ==
и ===
. Вот некоторые из известных мне соглашений:
==
в применении к обычным Object
s будет истинным только в том случае, если одно в точности совпадает с другим - если они сохранены в том же месте памяти (так Ruby работает внутри). Однако, если аргументы имеют типы, отличные от Object, этот метод обычно переопределяется. equal?
аналогично ==
для простых Object
s, но никогда не будет переопределено подклассами. ===
используется для:
is_a?
в обратном направлении. Строка === 'str'
истинно. / s [at] r * / === 'str'
верно. Вы можете найти конкретное значение ===
для различных классов в документации для этих классов, например, версия Range
находится здесь (синоним для include?
): http://ruby-doc.org/core/classes/Range.html#M000691