Мы не можем сказать, действительно ли вы получили === или нет из такого ограниченного примера. Но вот подробное описание того, что действительно происходит, когда вы используете ===, явно или неявно, как часть оператора case / when, такого как оператор, использованный в примере ..
Тройное равенство (===) имеет много разных реализаций, которые зависят от класса левой части. Это на самом деле просто инфиксная запись для метода. ===. Это означает, что следующие утверждения идентичны:
a.=== b
a === b
Разница не очень большая, но это означает, что метод левой стороны === вызывается вместо некоторого магического оператора, определенного на уровне языка, это похоже на ==, но не совсем. Вместо этого === определяется в каждом классе, который его использует, может быть, в унаследованном классе или Mixin.
Общее определение тройного равенства состоит в том, что он вернет истину, если обе части идентичны или если правая часть содержится в пределах диапазона левой.
В случае Class. === операция вернет true, если аргумент является экземпляром класса (или подкласса). В случае, когда левая сторона является регулярным выражением, она возвращает true, когда правая сторона соответствует регулярному выражению.
Когда case является подразумеваемым ===, который сравнивает переменную case с предложением when, используя ===, так что следующие два оператора дают одинаковый результат.
case a
when String
puts "This is a String"
when (1..3)
puts "A number between 1 and 3"
else
puts "Unknown"
end
if String === a
puts "This is a String"
elsif (1..3) === a
puts "A number between 1 and 3"
else
puts "Unknown"
end
Проверьте документацию о типах, которые вы используете, слева от оператора === или в операторе when, чтобы точно знать, как все работает.