2008-08-27 27 views
196

Programdan çıkan ve bir mesaj görüntüleyen tek bir satır işlev çağrısı var mı?Bir çıkış iletisi nasıl oluşturulur

die("Message goes here") 

Bunu yazmaktan yoruldum: Ben Perl o kadar basit olduğunu biliyorum

puts "Message goes here" 
exit 
+9

Küçük bir yorum, "koyar" yazdıklarını yazıyor, oysa "ölüyor" yazıyor, yani: "stderr.puts" Mesaj buraya geliyor ". – cdarke

+0

Bunun bir cevap olmadığını biliyorum, ama bu soruya cevap verdi, teşekkürler – Patrick

+0

Sadece referans için, Python'da 'sys.exit (" Mesaj stderr'e gider ")' dir. –

cevap

340

abort işlevi bunu yapar.

abort("Message goes here") 

Not: Örneğin: abort mesajı STDERR yazılır puts aksine STDOUT yazacağına hangi.

+6

Vay! Güzel bul! Çok kötü onlar bu işlevsellik ile sadece aşırı yükleme yapmadı .... –

+48

Not, iptal işlemi bir arızayı temsil eden yanlış durumdan programdan çıkar. Varsayılan olarak çıkış, gerçek başarıyı temsil eden bir durumla çıkar. Durum için doğru olanı kullandığınızdan emin olun. –

+1

re. Mike Stone'un yorumu, bazen Ruby'nin birbiriyle iletişim kurmayan bir ekip tarafından yazıldığı anlaşılıyor, değil mi? (Yine de, programlamak çok kolay.) – JellicleCat

2

Böyle bir fonksiyonun duymadım, ama uygulamak için yeterli önemsiz olacaktır. Bu, tüm komut dahil bazı .rb dosyasında tanımlanması durumunda .. Sonra

def die(msg) 
    puts msg 
    exit 
end 

, bunu yapamayacağınız anlamına gelmez yerleşik değil sırf .... altınız Kendiniz ;-)

kodunuzda gerçek bir hata belirtmek istiyorsanız
+3

'İptal' işlevi çıktığında (aşağıdaki cevaba bakın) –

+1

İptal işlevi işlevi sizin için ne zaman kod yazıyor? –

+0

@ChrisBunch Bu **, ** abort işleviyle aynı değil: 'exit' varsayılan olarak başlamış gibi geri dönüyor. 'iptal' bir hata verir. 'Çıkış 1 'de bir hata döndürecektir. – TemporalWolf

23

, bir RuntimeError istisna yükseltebilir:

raise RuntimeError, 'Message goes here' 

Bu bir stacktrace yazdırır, istisna tipi kaldırdı ve söz konusu ileti ediliyor. Kullanıcılarınıza bağlı olarak, bir stacktrace çok korkutucu olabilir ve asıl mesaj gürültüde kaybolabilir. Diğer taraftan, gerçek bir hata nedeniyle ölürseniz, bir stacktrace size hata ayıklama için ek bilgi verecektir.

+23

Birini yükseltmek için RuntimeError'dan bahsetmene gerek yoktur, bu durumda aşağıdaki kod yeterli olacaktır: zam Mesajınız burada kalıyor – sunaku

+0

sunaku - yorumunuz tamamen geçerli olsa da Daha açık olmak, özellikle de kod geçronunu okuyan diğer insanlar için yararlı olabilir. – shevy

2

Program bittiğinde bazı kodları yürütmenin bir yolunu arıyorum.
Found this:

Kernel.at_exit { puts "sayonara" } 
# do whatever 
# [...] 
# call #exit or #abort or just let the program end 
# calling #exit! will skip the call 

Aranan birden çok kez birden fazla işleyici kaydeder.