Bạn có thể sử dụng một mảng với toán tử splat *
.
EXCEPTIONS = [FooException, BarException]
begin
a = rand
if a > 0.5
raise FooException
else
raise BarException
end
rescue *EXCEPTIONS
puts "rescued!"
end
Nếu bạn định sử dụng một hằng số cho mảng như trên (với EXCEPTIONS
), hãy lưu ý rằng bạn không thể định nghĩa nó trong một định nghĩa, và nếu bạn định nghĩa nó trong một số lớp khác, bạn phải tham chiếu đến nó với không gian tên của nó. Trên thực tế, nó không nhất thiết phải là một hằng số.
Nhà điều hành Splat
Toán tử splat *
"giải nén" một mảng ở vị trí của nó để
rescue *EXCEPTIONS
có nghĩa là giống như
rescue FooException, BarException
Bạn cũng có thể sử dụng nó trong một mảng ký tự như
[BazException, *EXCEPTIONS, BangExcepion]
giống như
[BazException, FooException, BarException, BangExcepion]
hoặc ở một vị trí đối số
method(BazException, *EXCEPTIONS, BangExcepion)
nghĩa là
method(BazException, FooException, BarException, BangExcepion)
[]
mở rộng đến chỗ trống:
[a, *[], b] # => [a, b]
Một sự khác biệt giữa ruby 1.8 và ruby 1.9 là với nil
.
[a, *nil, b] # => [a, b] (ruby 1.9)
[a, *nil, b] # => [a, nil, b] (ruby 1.8)
Hãy cẩn thận với các đối tượng to_a
được xác định trên đó , như to_a
sẽ được áp dụng trong các trường hợp như vậy:
[a, *{k: :v}, b] # => [a, [:k, :v], b]
Với các loại đối tượng khác, nó tự trả về.
[1, *2, 3] # => [1, 2, 3]