Puede utilizar una matriz con el operador splat *
.
EXCEPTIONS = [FooException, BarException]
begin
a = rand
if a > 0.5
raise FooException
else
raise BarException
end
rescue *EXCEPTIONS
puts "rescued!"
end
Si va a usar una constante para la matriz como arriba (con EXCEPTIONS
), tenga en cuenta que no puede definirla dentro de una definición, y también si la define en alguna otra clase, debe referirse a ella con su espacio de nombres. En realidad, no tiene por qué ser una constante.
Operador de Splat
El operador de splat *
"desempaqueta" una matriz en su posición para que
rescue *EXCEPTIONS
significa lo mismo que
rescue FooException, BarException
También puede usarlo dentro de un literal de matriz como
[BazException, *EXCEPTIONS, BangExcepion]
que es lo mismo que
[BazException, FooException, BarException, BangExcepion]
o en una posición de argumento
method(BazException, *EXCEPTIONS, BangExcepion)
lo que significa
method(BazException, FooException, BarException, BangExcepion)
[]
se expande al vacío:
[a, *[], b] # => [a, b]
Una diferencia entre ruby 1.8 y ruby 1.9 es con nil
.
[a, *nil, b] # => [a, b] (ruby 1.9)
[a, *nil, b] # => [a, nil, b] (ruby 1.8)
Tenga cuidado con los objetos sobre los que to_a
está definido, ya to_a
que se aplicará en tales casos:
[a, *{k: :v}, b] # => [a, [:k, :v], b]
Con otros tipos de objetos, vuelve a sí mismo.
[1, *2, 3] # => [1, 2, 3]