Vous pouvez utiliser un tableau avec le dossier de l'opérateur *
.
EXCEPTIONS = [FooException, BarException]
begin
a = rand
if a > 0.5
raise FooException
else
raise BarException
end
rescue *EXCEPTIONS
puts "rescued!"
end
Si vous allez utiliser une constante pour le tableau comme ci-dessus (avec EXCEPTIONS
), notez que vous ne pouvez pas définir à l'intérieur d'une définition, et aussi si vous définissez dans certains autres de la classe, vous devez vous référer à elle avec son espace de noms. En fait, il n'a pas à être une constante.
Splat OpérateurLe splat opearator *
"déballe" un tableau dans sa position de sorte que
rescue *EXCEPTIONS
signifie la même chose que
rescue FooException, BarException
Vous pouvez également l'utiliser à l'intérieur d'un littéral de tableau comme
[BazException, *EXCEPTIONS, BangExcepion]
qui est le même que
[BazException, FooException, BarException, BangExcepion]
ou dans un argument de position
method(BazException, *EXCEPTIONS, BangExcepion)
ce qui signifie
method(BazException, FooException, BarException, BangExcepion)
[]
étend à vide:
[a, *[], b] # => [a, b]
Une différence entre ruby et ruby 1.8 1.9 est avec nil
.
[a, *nil, b] # => [a, b] (ruby 1.9)
[a, *nil, b] # => [a, nil, b] (ruby 1.8)
Être prudent avec les objets sur lesquels to_a
est défini, en to_a
sera appliquée dans de tels cas:
[a, *{k: :v}, b] # => [a, [:k, :v], b]
Avec d'autres types d'objets, il renvoie lui-même.
[1, *2, 3] # => [1, 2, 3]