Çıkış mesajı nasıl oluşturulur?


208

Programdan çıkıp bir mesaj görüntüleyen tek hatlı bir işlev çağrısı var mı? Perl'de bunun kadar basit olduğunu biliyorum:

die("Message goes here")

Bunu yazmaktan yoruldum:

puts "Message goes here"
exit

10
Küçük bir yorum, sizin putsoysa Stdout'a yazıyor, dieyazıyor, yani stderr: $stderr.puts "Message goes here".
cdarke

Bunun bir cevap olmadığını biliyorum, ama sorumu yanıtladı, teşekkürler
Patrick

Sadece referans için, Python'da sys.exit("Message goes to stderr").
anatoly techtonik

Yanıtlar:


361

abortİşlev yapar. Örneğin:

abort("Message goes here")

Not: abortileti yazılır STDERRaksine putshangi yazacağız STDOUT.


6
Vaov! Güzel bulmak! Çok kötü onlar sadece bu işlevselliği ile çıkış aşırı değildi ....
Mike Stone

56
Unutmayın, iptal, başarısızlık durumunu gösteren false durumuna sahip programdan çıkar. çıkış varsayılan olarak, gerçek temsil eden başarılı durumuyla çıkar. Durum için doğru olanı kullandığınızdan emin olun.
Alex Spurling

1
yeniden. Mike Stone'un yorumu, bazen Ruby, birbirleriyle iletişim kurmayan bir ekip tarafından yazılmış gibi görünüyor, değil mi? (Yine de, içinde programlamak çok kolaydır.)
JellicleCat

24

Kodunuzdaki gerçek bir hatayı belirtmek istiyorsanız, bir RuntimeErroristisna oluşturabilirsiniz:

raise RuntimeError, 'Message goes here'

Bu, bir yığın izlemesi, yükseltilen istisnanın türü ve sağladığınız ileti yazdırılır. Kullanıcılarınıza bağlı olarak, bir yığın izleme çok korkutucu olabilir ve gerçek mesaj gürültüde kaybolabilir. Öte yandan, gerçek bir hata nedeniyle ölürseniz, bir stacktrace size hata ayıklama için ek bilgi verecektir.


24
Birini yükseltmek için RuntimeError'dan bahsetmenize gerek yok (bu varsayılan istisna türündedir), bu nedenle aşağıdaki kod yeterli olacaktır: yükseltmek 'Mesaj buraya gelir'
sunaku

sunaku - yorumunuz tamamen geçerli olsa da, daha açık olmanın, özellikle kod lateronunu okuyan diğer insanlar için yararlı olabileceğini sık sık buldum.
shevy

2

Hiç böyle bir işlevi duymadım, ama uygulamak yeterince önemsiz olurdu ...

def die(msg)
  puts msg
  exit
end

Daha sonra, bu tüm komut dosyalarınıza dahil ettiğiniz bazı .rb dosyasında tanımlanmışsa, altınsınız .... sadece yerleşik olmadığı için kendiniz yapamayacağınız anlamına gelmez ;-)


3
`` İptal '' işlevini yapıyor (aşağıdaki cevabım bakın)
Chris Bunch

1
Neden iptal işlevi sizin için yaptığında kod yazmalısınız?
Gary Haran

2
@ChrisBunch Bu iptal işlevi ile aynı değildir : exitvarsayılan, başarılı olmuş gibi döndürülecektir . abortbir hata döndürür. exit 1bir hata döndürecektir.
TemporalWolf

2

Burada program sona erdiğinde bazı kod yürütmek için bir yol arıyor var.
Bunu buldum :

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

Birden çok kez çağrıldığında birden çok işleyici kaydedilir.

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.