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