Ruby'de fail anahtar sözcüğü ne işe yarar?


88

Ruby'yi öğreniyorum ve failanahtar kelimeyle karşılaştım . Bunun anlamı ne?

if password.length < 8
   fail "Password too short"
end
unless  username
   fail "No user name set"
end

8
Aşağıdakilere ek olarak, insanların raiseistisnaları ele failalırken ve kullanmadığında kullandıklarını bilmeye değer .
Bala

6
Bu bir anahtar kelime değil, bir yöntem.
Jörg W Mittag


Ayrıca, bunları tek satır ifadeler olarak yazabileceğinizi unutmayın: fail "Password too short" if password.length < 8vefail "No user name set" unless username
PhilT

Yanıtlar:


136

Ruby'de, failile eşanlamlıdır raise. failAnahtar için bir yöntemdir Kernelsınıf tarafından dahildir modülü Object. failYöntem tıpkı bir çalışma zamanı hatası yükseltir raiseanahtar kelime.

failYöntem, üç aşırı yükleme var

  • fail: RuntimeErrorhata mesajı olmadan bir yükseltir .

  • fail(string): RuntimeErrorbir hata mesajı olarak dize bağımsız değişkeniyle a yükseltir :

    fail "Failed to open file"
    
  • fail(exception [, string [, array]]): exceptionisteğe bağlı bir hata mesajı (ikinci bağımsız değişken) ve geri arama bilgisi (üçüncü bağımsız değişken) ile bir sınıf istisnası (birinci bağımsız değişken) oluşturur.

    Örnek: Kötü bir bağımsız değişken verildiğinde başarısız olması gereken bir işlev tanımladığınızı varsayın. A ArgumentErrordeğil , yükseltmek daha iyidir RuntimeError:

    fail ArgumentError, "Illegal String"
    

    Başka Örnek: Sen bütün geçebilir geri izleme için failiçeride iz erişebilmek yöntemle rescuebloğu:

    fail ArgumentError, "Illegal String", caller
    

    callergeri izlemeyi formdaki dizeler dizisi olarak döndüren bir Kernel yöntemidir file:line: in 'method'.

Bağımsız değişken olmadan, istisnayı $! veya $! ise bir RuntimeError yükseltir. sıfırdır. Tek bir String bağımsız değişkeni ile, dizeyi ileti olarak içeren bir RuntimeError hatası oluşturur. Aksi takdirde, ilk parametre bir Exception sınıfının (veya bir istisna mesajı gönderildiğinde bir Exception nesnesi döndüren bir nesnenin) adı olmalıdır. İsteğe bağlı ikinci parametre, istisna ile ilişkili mesajı ayarlar ve üçüncü parametre, bir geri arama bilgileri dizisidir. İstisnalar, start ... end bloklarının kurtarma cümlesine bağlıdır.

Kaynak: Çekirdek Modülündeki Ruby Belgeleri .


2
3 madde işaretiyle 3 basit örnek verebilir misiniz? Cevabınızı daha somut hale getirecek .. :)
Arup Rakshit

1
Vay, +1, crazybob Ruby'den daha iyi docs ruby-doc.org/core-2.0.0/Kernel.html#method-i-raise :-)))
Boris Stitnicky

Benim için çalıştı ama Rubocop bunuraise
paul

32

Rubocop , her iki kelimenin kullanımından bahsediyor ;

failBunun yerine kullanınraise İstisnaları belirtmek için .'

' İstisnaları yeniden atmak raiseyerine kullanın fail.'

İşte bir örnek.

def sample
  fail 'something wrong' unless success?
rescue => e
  logger.error e
  raise
end

Stil danışmanlığı için +1; Her birini anlamsal olarak amaçladıkları ortamda kullanarak özdeş olsalar bile, niyeti daha iyi iletmeye yardımcı olur
fatuhoku

26

fail == raise

Başka bir deyişle, hata artırma yöntemi failiçin popüler bir takma raiseaddır. Kullanım:

fail ArgumentError, "Don't argue with me!"

7

www.ruby-doc.org arkadaşınızdır. Google'da rubydoc fail" Kernel " yazdığımda ilk isabet oldu. Tavsiyem, şüphe duyduğunuzda, bunun gibi tanımlayıcı şeyler için kesin kaynağa gitmenizdir.


2
Vay be, bu gerçekten bir BAŞARISIZ. Başarısız için kod örneği, yükseltme
o_O'dan

4
@VajkHermecz fail, yükseltmenin bir takma adıdır, bu nedenle belgeleri yeniden kullanır. Dizi # haritası ve Dizi # toplama belgeleriyle karşılaştırın
Jamie Macey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.