将 splat 运算符与 when 一起使用

X. *_*ang 5 ruby splat

案例陈述:

case x
when 1
  "one"
when 2
  "two"
when 3
  "three"
else
  "many"
end
Run Code Online (Sandbox Code Playgroud)

使用运算符进行评估===。该运算符在表达式的值上调用,when并将表达式的值case作为参数。上面的 case 语句等价于以下内容:

if 1 === x
  "one"
elsif 2 === x
  "two"
elsif 3 === x
  "three"
else
  "many"
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下:

A = 1
B = [2, 3, 4]
case reason
when A
  puts "busy"
when *B
  puts "offline"
end
Run Code Online (Sandbox Code Playgroud)

when *B部分无法重写为*B === 2.

这是关于 splat 运算符吗?splat 运算符是关于赋值,而不是比较。case语句如何处理when *B

Ste*_*fan 6

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

在本例中,将数组*转换为参数列表

when *[2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

相当于:

when 2, 3, 4
Run Code Online (Sandbox Code Playgroud)

就像在方法调用中一样:

foo(*[2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

相当于:

foo(2, 3, 4)
Run Code Online (Sandbox Code Playgroud)