Операторы сравнения Ruby? == по сравнению с === [дубликат]

13
задан keruilin 1 July 2010 в 03:16
поделиться

2 ответа

== используется для равенства в условных операторах, таких как if , , если и т. Д. === используется для определения равенства в case заявления.

-2
ответ дан 1 December 2019 в 22:22
поделиться

Оба являются просто методами, вызываемыми для объектов. Это означает, что объекты решают, что что значит. Однако в 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

24
ответ дан 1 December 2019 в 22:22
поделиться