Ви можете використовувати масив з оператором splat *
.
EXCEPTIONS = [FooException, BarException]
begin
a = rand
if a > 0.5
raise FooException
else
raise BarException
end
rescue *EXCEPTIONS
puts "rescued!"
end
Якщо ви збираєтесь використовувати константу для масиву, як зазначено вище (з EXCEPTIONS
), зауважте, що ви не можете визначити його в рамках визначення, а також якщо ви визначите його в іншому класі, вам доведеться посилатися на нього з його простором імен. Власне, це не повинно бути постійним.
Splat Operator
Оператор splat *
"розпаковує" масив у своєму положенні так, що
rescue *EXCEPTIONS
означає те саме, що
rescue FooException, BarException
Ви також можете використовувати його в прямому масиві як
[BazException, *EXCEPTIONS, BangExcepion]
що те саме
[BazException, FooException, BarException, BangExcepion]
або в позиції аргументу
method(BazException, *EXCEPTIONS, BangExcepion)
що означає
method(BazException, FooException, BarException, BangExcepion)
[]
розширюється до вакууму:
[a, *[], b] # => [a, b]
Одна різниця між рубіном 1,8 і рубіном 1,9 є в nil
.
[a, *nil, b] # => [a, b] (ruby 1.9)
[a, *nil, b] # => [a, nil, b] (ruby 1.8)
Будьте обережні з об'єктами, на яких to_a
визначено, що to_a
буде застосовано в таких випадках:
[a, *{k: :v}, b] # => [a, [:k, :v], b]
З іншими типами об’єктів вона повертається сама.
[1, *2, 3] # => [1, 2, 3]