使用splat运算符时

时间:2017-06-15 08:05:07

标签: ruby splat

案例陈述:

case x
when 1
  "one"
when 2
  "two"
when 3
  "three"
else
  "many"
end

使用===运算符进行评估。在when表达式的值上调用此运算符,并将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

1 个答案:

答案 0 :(得分:3)

  

但是splat运算符是关于赋值而不是比较。

在这种情况下,*会转换array into an argument list

when *[2, 3, 4]

相当于:

when 2, 3, 4

就像在方法调用中一样:

foo(*[2, 3, 4])

相当于:

foo(2, 3, 4)