Вы можете использовать массив с оператором знака знака *
.
EXCEPTIONS = [FooException, BarException]
begin
a = rand
if a > 0.5
raise FooException
else
raise BarException
end
rescue *EXCEPTIONS
puts "rescued!"
end
Если вы собираетесь использовать константу для массива, как указано выше (с EXCEPTIONS
), обратите внимание, что вы не можете определить ее в определении, а также, если вы определяете ее в каком-то другом классе, вы должны ссылаться на нее с ее пространством имен. На самом деле, это не должно быть константой.
Оператор Splat
Оператор 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]
Одно различие между ruby 1.8 и ruby 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]
person
sawa
schedule
25.04.2011