您可以将数组与 splat 运算符一起使用*
。
EXCEPTIONS = [FooException, BarException]
begin
a = rand
if a > 0.5
raise FooException
else
raise BarException
end
rescue *EXCEPTIONS
puts "rescued!"
end
如果您要使用上述数组的常量(使用EXCEPTIONS
),请注意您不能在定义中定义它,并且如果您在其他类中定义它,则必须使用其命名空间来引用它。实际上,它不必是一个常数。
喷溅操作员
splat 运算符*
在其位置“解包”一个数组,以便
rescue *EXCEPTIONS
意思是一样的
rescue FooException, BarException
您也可以在数组文字中使用它作为
[BazException, *EXCEPTIONS, BangExcepion]
这与
[BazException, FooException, BarException, BangExcepion]
或在争论的位置
method(BazException, *EXCEPTIONS, BangExcepion)
意思是
method(BazException, FooException, BarException, BangExcepion)
[]
扩展为空:
[a, *[], b] # => [a, b]
ruby 1.8 和 ruby 1.9 之间的一个区别是nil
.
[a, *nil, b] # => [a, b] (ruby 1.9)
[a, *nil, b] # => [a, nil, b] (ruby 1.8)
请注意to_a
定义了的对象,to_a
在这种情况下将应用:
[a, *{k: :v}, b] # => [a, [:k, :v], b]
对于其他类型的对象,它会返回自身。
[1, *2, 3] # => [1, 2, 3]