È possibile utilizzare un array con l'operatore splat *
.
EXCEPTIONS = [FooException, BarException]
begin
a = rand
if a > 0.5
raise FooException
else
raise BarException
end
rescue *EXCEPTIONS
puts "rescued!"
end
Se intendi utilizzare una costante per l'array come sopra (con EXCEPTIONS
), nota che non puoi definirla all'interno di una definizione, e anche se la definisci in qualche altra classe, devi fare riferimento ad essa con il suo spazio dei nomi. In realtà, non deve essere una costante.
Operatore Splat
L'operatore splat *
"decomprime" un array nella sua posizione in modo che
rescue *EXCEPTIONS
significa lo stesso di
rescue FooException, BarException
Puoi anche usarlo all'interno di un array letterale come
[BazException, *EXCEPTIONS, BangExcepion]
che è lo stesso di
[BazException, FooException, BarException, BangExcepion]
o in una posizione di argomento
method(BazException, *EXCEPTIONS, BangExcepion)
che significa
method(BazException, FooException, BarException, BangExcepion)
[]
si espande in vacuità:
[a, *[], b] # => [a, b]
Una differenza tra ruby 1.8 e ruby 1.9 è con nil
.
[a, *nil, b] # => [a, b] (ruby 1.9)
[a, *nil, b] # => [a, nil, b] (ruby 1.8)
Attenzione agli oggetti sui quali to_a
è definito, come to_a
verrà applicato in questi casi:
[a, *{k: :v}, b] # => [a, [:k, :v], b]
Con altri tipi di oggetti, ritorna se stesso.
[1, *2, 3] # => [1, 2, 3]