Назад к вопросам
Middle
104
questionbank

Что такое оператор '===' в Ruby?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Оператор === (тройное равно) в Ruby называется оператором проверки принадлежности (case equality operator).

Он используется в выражениях case/when и определяется классами для проверки, принадлежит ли правый операнд "категории" или "диапазону", представленному левым операндом.

Поведение оператора === зависит от класса левого операнда.

Примеры:

  • Класс Module: Проверяет, является ли правый операнд экземпляром или потомком модуля/класса.
    # Проверяет, является ли правый операнд экземпляром String или его потомка.
    String === "hello"
    # => true
    
  • Класс Range: Проверяет, находится ли правый операнд в диапазоне.
    # Проверяет, находится ли 5 в диапазоне 1..10.
    (1..10) === 5
    # => true
    
  • Класс Regexp: Проверяет, соответствует ли строка регулярному выражению.
    # Проверяет, соответствует ли строка "/ruby/" регулярному выражению /ruby/.
    /ruby/ === "/ruby/"
    # => true
    
  • Класс Proc: Вызывает блок с правым операндом в качестве аргумента.
    # Вызывает блок с аргументом 5.
    ->(x) { x > 3 } === 5
    # => true
    
  • Класс Symbol: Сравнивает символ с другой строкой или символом.
    # Сравнивает символ :test со строкой "test".
    :test === "test"
    # => true
    

В большинстве других классов === ведет себя как ==.

Применение в case/when:

Выражение case condition эквивалентно серии вызовов === на каждом when значении с condition в качестве правого операнда.

# Эквивалентно String === value
# Затем Integer === value
case value
when String
  # ...
when Integer
  # ...
end