您可以将数组与splat运算符一起使用*
。
EXCEPTIONS = [FooException, BarException]
begin
a = rand
if a > 0.5
raise FooException
else
raise BarException
end
rescue *EXCEPTIONS
puts "rescued!"
end
如果要对上面的数组使用常量(带有EXCEPTIONS
),请注意,您不能在定义中定义它,并且如果在其他类中定义它,则必须使用其命名空间来引用它。实际上,它不一定是常数。
Splat运算子
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]