Почему Array не отменяет метод тройного знака равенства в Ruby?

Я только что заметил, что 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"
6
задан Jordan Running 12 October 2011 в 01:20
поделиться