В чем разница между == и ===? Какой из них следует использовать, когда?Операторы сравнения Ruby? == vs. ===
ответ
==
используются для равенства в условных операторах, как if
, unless
и т.д. ===
используются для определения равенства в case
отчетности.
В качестве примера, 10 не равно 1..20, но он находится в этом диапазоне. Таким образом, вы можете захотеть поместить диапазон в свой оператор case и выбрать его. Также обратите внимание, что операторы case преобразуются в b === a в выражениях типа 'case a, когда b then true end' –
Оба являются просто методами, называемыми объектами. Это означает, что объекты решают, что именно означает. Однако в Ruby есть соглашения о том, как они отличаются. Обычно ==
является более строгим, чем ===
- a === b
будет почти всегда будет правдой, если a == b
есть. Лучшее место для чтения - http://ruby-doc.org/core/classes/Object.html. Прокрутите вниз до разных разделов около ==
и ===
. Вот некоторые из конвенций, о которых я знаю:
==
, при нанесении на равнинныхObject
с, будет только справедливо, если один точно такой же, как и другие - если они хранятся в месте же памяти (это как работает Ruby внутри). Однако, если аргументы имеют типы, отличные от Object, этот метод обычно будет переопределен.equal?
как==
для простогоObject
s, но никогда не будет переопределяться подклассами.===
используется для:- в
is_a?
альтернативы, в обратном направлении.String === 'str'
- это правда. - соответствующий regexes.
/s[at]r*/ === 'str'
- это правда.
- в
Вы можете найти конкретный смысл ===
для различных классов в документации для этих классов, например, версия Range
здесь (синоним include?
): http://ruby-doc.org/core/classes/Range.html#M000691
Хороший пример переопределения' == ', так что он делает то, что вы (вероятно) ожидаете, это строки. Сравните '==' и '.equal' для строкового литерала и переменной, указывающей на« ту же »строку. – Telemachus
- 1. Ruby = ~ vs === Операторы
- 2. Операторы сравнения Overpass-api
- 3. Операторы сравнения в regex
- 4. Операторы сравнения строк
- 5. Операторы сравнения в C++
- 6. Операторы сравнения PowerShell
- 7. Множественные операторы сравнения
- 8. Операторы сравнения для символов
- 9. Операторы сравнения! == против 0
- 10. Параметры Haskell - операторы сравнения
- 11. Операторы сравнения C++
- 12. Цепные Перегруженные операторы сравнения
- 13. операторы сравнения вызовов в Haskell
- 14. Контейнеры reference_wrappers (требуется операторы сравнения?)
- 15. Операторы сравнения VBScript не работают?
- 16. операторы сравнения precendence в Bison
- 17. Если операторы сравнения целых чисел
- 18. JQuery/JavaScript Операторы сравнения "===" и "=="
- 19. Операторы сравнения строк сценария Bash
- 20. Операторы сравнения для строк C
- 21. Операторы динамического сравнения в PHP
- 22. предпочтительные операторы сравнения языка Python
- 23. Класс шаблона, реализующий операторы сравнения
- 24. Операторы сравнения JavaScript не работают
- 25. Операторы сравнения POSTGRESQL по тексту
- 26. Логические операторы MATLAB: && vs &
- 27. - vs - = операторы с numpy
- 28. Быстрые операторы == vs ===
- 29. Операторы Ruby как методы?
- 30. Операторы присваивания Ruby
Там это действительно твердые ответ на это в [В чем разница между равными ?, eql ?, === и ==?] (http://stackoverflow.com/questions/7156955/whats-the-difference-between-equal-eql-and) –