Array가 트리플 등호 메서드 ===
을 오버라이드하지 않는 것으로 나타났습니다.이 메서드는 대소 문자 균등 메서드라고도합니다.왜 Array가 Ruby에서 트리플 등호 (triple equal sign) 메서드를 무시합니까?
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"
당신의 직관 내 일치합니다. Range를 다른 범위와 일치시키기 위해 'case'표현식에 전달하려는 많은 시나리오를 생각할 수는 없지만, Array를 전달하여 배열을 전달할 것인지 여러 가지를 생각할 수 있습니다. 정확히 다른 배열과 일치했습니다. –
확실한 답을 얻으려면 core에 질문해야 할 것입니다. 내 생각 엔 배열은 * 범위가 있기 때문에 * 동작하지 않는다는 것입니다. – sheldonh