SORU
25 NİSAN 2011, PAZARTESİ


Geçen ruby için birden fazla hata sınıfları'in kurtarma tümcesi KURU bir şekilde

Ruby istisnalar çok tip kurtarılması için bazı kod var:

begin
  a = rand
  if a > 0.5
    raise FooException
  else
    raise BarException
  end
rescue FooException, BarException
  puts "rescued!"
end

Yapmak istediğim şey bir şekilde bir yerlerde kurtarma ve kurtarma maddesi bu tür geçmek istiyorum, bu durum, türleri listesi mağaza

EXCEPTIONS = [FooException, BarException]

ve sonra:

rescue EXCEPTIONS

Bu mümkün mü, ve bazı gerçekten hack-y eval çağrı olmadan mümkün mü? Yukarıdaki bulunduğunuzda TypeError: class or module required for rescue clause görüyorum göz önüne alındığında ümitli değilim.

CEVAP
25 NİSAN 2011, PAZARTESİ


Splat operatörü ile bir dizi * kullanabilirsiniz.

EXCEPTIONS = [FooException, BarException]

begin
  a = rand
  if a > 0.5
    raise FooException
  else
    raise BarException
  end
rescue *EXCEPTIONS
  puts "rescued!"
end

Eğer kullanacak bir sabit dizi ise, yukarıdaki (EXCEPTIONS), not seni tanımlamak değil, kendi içinde bir tanım, ve de eğer tanımladığınız bu konuyu başka bir sınıf, söz ile kendi ad. Aslında, bir sabit olmak zorunda değildir.


Splat Operatör

Eğer uyarısı opearator * "ayıklar" konumunda bir dizi

rescue *EXCEPTIONS

aynı anlama geliyor gibi

rescue FooException, BarException

Ayrıca bir dizi olarak edebi içinde kullanabilirsiniz

[BazException, *EXCEPTIONS, BangExcepion]

aynıdır

[BazException, FooException, BarException, BangExcepion]

ya da bağımsız bir konumda

method(BazException, *EXCEPTIONS, BangExcepion)

demek ki

method(BazException, FooException, BarException, BangExcepion)

[] dalgınlık genişletir:

[a, *[], b] # => [a, b]

Ruby ve ruby 1.9 1.8 arasında bir fark nil ile.

[a, *nil, b] # => [a, b]       (ruby 1.9)
[a, *nil, b] # => [a, nil, b]  (ruby 1.8)

Hangi to_a to_a bu gibi durumlarda: uygulanacak şeklinde tanımlanır nesneler ile dikkatli olun

[a, *{k: :v}, b] # => [a, [:k, :v], b]

Nesnelerin diğer türleri ile, kendisi verir.

[1, *2, 3] # => [1, 2, 3]

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Booredatwork.com

    Booredatwork

    5 Ocak 2009
  • HDstarcraft

    HDstarcraft

    12 Mayıs 2009
  • snookie77

    snookie77

    2 Mart 2006