将 splat 运算符与 when 一起使用
Using splat operator with when
案例陈述:
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
?
But the splat operator is about assignment, not comparison.
在这种情况下,*
转换 array into an argument list:
when *[2, 3, 4]
相当于:
when 2, 3, 4
就像在方法调用中一样:
foo(*[2, 3, 4])
相当于:
foo(2, 3, 4)
案例陈述:
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
?
But the splat operator is about assignment, not comparison.
在这种情况下,*
转换 array into an argument list:
when *[2, 3, 4]
相当于:
when 2, 3, 4
就像在方法调用中一样:
foo(*[2, 3, 4])
相当于:
foo(2, 3, 4)