Sie können ein Array mit dem Splat-Operator verwenden *
.
EXCEPTIONS = [FooException, BarException]
begin
a = rand
if a > 0.5
raise FooException
else
raise BarException
end
rescue *EXCEPTIONS
puts "rescued!"
end
Wenn Sie eine Konstante für das Array wie oben (mit EXCEPTIONS
) verwenden möchten, beachten Sie, dass Sie sie nicht innerhalb einer Definition definieren können. Wenn Sie sie auch in einer anderen Klasse definieren, müssen Sie mit ihrem Namespace darauf verweisen. Eigentlich muss es keine Konstante sein.
Splat-Operator
Der Splat-Operator *
"entpackt" ein Array an seiner Position, so dass
rescue *EXCEPTIONS
bedeutet das gleiche wie
rescue FooException, BarException
Sie können es auch in einem Array-Literal als verwenden
[BazException, *EXCEPTIONS, BangExcepion]
das ist das gleiche wie
[BazException, FooException, BarException, BangExcepion]
oder in einer Argumentationsposition
method(BazException, *EXCEPTIONS, BangExcepion)
was bedeutet
method(BazException, FooException, BarException, BangExcepion)
[]
erweitert sich auf Leerstand:
[a, *[], b] # => [a, b]
Ein Unterschied zwischen Rubin 1.8 und Rubin 1.9 besteht bei nil
.
[a, *nil, b] # => [a, b] (ruby 1.9)
[a, *nil, b] # => [a, nil, b] (ruby 1.8)
Seien Sie vorsichtig mit Objekten, auf die to_a
definiert ist, wie to_a
in solchen Fällen angewendet wird:
[a, *{k: :v}, b] # => [a, [:k, :v], b]
Bei anderen Objekttypen gibt es sich selbst zurück.
[1, *2, 3] # => [1, 2, 3]