Заявление о случае:
case x
when 1
"one"
when 2
"two"
when 3
"three"
else
"many"
end
оценивается с помощью оператора ===
. Этот оператор вызывается для значения выражения when
со значением выражения case
в качестве аргумента. Приведенный выше оператор case эквивалентен следующему:
if 1 === x
"one"
elsif 2 === x
"two"
elsif 3 === x
"three"
else
"many"
end
В таком случае:
A = 1
B = [2, 3, 4]
case reason
when A
puts "busy"
when *B
puts "offline"
end
часть when *B
не может быть перезаписана в *B === 2
.
Это про оператора splat? Оператор splat предназначен для присваивания, а не для сравнения. Как оператор case обрабатывает when *B
?