可以使用splat运算符*
的array.
EXCEPTIONS = [FooException, BarException]
begin
a = rand
if a > 0.5
raise FooException
else
raise BarException
end
rescue *EXCEPTIONS
puts "rescued!"
end
如果要像上面那样为数组使用常量(带EXCEPTIONS
),请注意不能在定义中定义它,而且如果在其他类中定义它,则必须使用其名称空间引用它.实际上,它不一定是常数.
Splat Operator
splat运算符*
在其位置"解压"数组,以便
rescue *EXCEPTIONS
意思和
rescue FooException, BarException
您还可以在数组文本中使用它作为
[BazException, *EXCEPTIONS, BangExcepion]
这和
[BazException, FooException, BarException, BangExcepion]
或者处于争论的立场
method(BazException, *EXCEPTIONS, BangExcepion)
也就是说
method(BazException, FooException, BarException, BangExcepion)
[]
inflating 为真空:
[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]