Możesz użyć tablicy z operatorem splat *
.
EXCEPTIONS = [FooException, BarException]
begin
a = rand
if a > 0.5
raise FooException
else
raise BarException
end
rescue *EXCEPTIONS
puts "rescued!"
end
Jeśli zamierzasz użyć stałej dla tablicy jak powyżej (z EXCEPTIONS
), zwróć uwagę, że nie możesz jej zdefiniować w definicji, a także jeśli zdefiniujesz ją w innej klasie, musisz odwołać się do niej za pomocą jej przestrzeni nazw. Właściwie nie musi to być stała.
Operator Splat
Operator splat *
"rozpakowuje" tablicę w jej pozycji, tak że
rescue *EXCEPTIONS
oznacza to samo co
rescue FooException, BarException
Można go również użyć w literale tablicowym jako
[BazException, *EXCEPTIONS, BangExcepion]
który jest taki sam jak
[BazException, FooException, BarException, BangExcepion]
lub w pozycji argumentu
method(BazException, *EXCEPTIONS, BangExcepion)
co znaczy
method(BazException, FooException, BarException, BangExcepion)
[]
rozszerza się do wakatu:
[a, *[], b] # => [a, b]
Jedna różnica między ruby 1,8 a ruby 1,9 polega na nil
.
[a, *nil, b] # => [a, b] (ruby 1.9)
[a, *nil, b] # => [a, nil, b] (ruby 1.8)
Uważaj na obiekty, na których to_a
jest zdefiniowany, co to_a
zostanie zastosowane w takich przypadkach:
[a, *{k: :v}, b] # => [a, [:k, :v], b]
W przypadku innych typów obiektów powraca.
[1, *2, 3] # => [1, 2, 3]