Я только что заметил, что Array не отменяет метод тройного знака равенства ===
, который иногда называют методом равенства случаев.
x = 2
case x
when [1, 2, 3] then "match"
else "no match"
end # => "no match"
, в то время как оператор диапазона:
x = 2
case x
when 1..3 then "match"
else "no match"
end # => "match"
Однако для массивов можно сделать обходной путь:
x = 2
case x
when *[1, 2, 3] then "match"
else "no match"
end # => "match"
Известно ли, почему это так?
Потому что это более вероятно для x
будет реальным массивом, а не диапазоном, а переопределение массива ===
будет означать, что обычное равенство не будет совпадением?
# This is ok, because x being 1..3 is a very unlikely event
# But if this behavior occurred with arrays, chaos would ensue?
x = 1..3
case x
when 1..3 then "match"
else "no match"
end # => "no match"