2017-08-15 18 views
8

Perl 5'te, Sazan işlevlerinden herhangi birini kullanırdım. Perl 6'da, arama yardım değildi ve trace pragma sadece istediğim değil tüm yığınları basacak.Perl 6'da yığın izi yazdırmanın kanonik bir yolu var mı?

{ 
    die; 
    CATCH { default { .say } } 
} 

Bunu yapmak için doğru yolu nedir: Biraz lazier olmak

try { 
    X::AdHoc.new(payload => 'Stack').throw; 
    CATCH { when X::AdHoc { .say; } } 
} 

Veya: Sadece istisna atan o alıcı ve yazdırmadan eski kesmek kullanmak olabilir?

cevap

7

Bu soruyu yazarken cevabı gerçekten buldum ve önceki aramalarımda gösterilmediğinden burayı buraya göndermeye karar verdim. Perl 6'nın Backtrace sınıf bir yığın izleme almak ve bir dizeye dönüştürür: (. Normalde gizli bazı ek alt düzey yığın kareleri görmek için Backtrace.new.full kullanın)

say "Stack: " ~ Backtrace.new; 

+1

son kod görünüm ne yapar sevmek? –

+0

@ChristopherBottoms Öyleydi. Backtrace.new.Str, geçerli yığın izlemesini bir dize olarak verir. Günlüğe kaydet, sakla, ayrıştır. (Ama eğer ayrışıyor olsaydınız, “.Str” demezdiniz. 'Backtrace' nesnesinin diğer yöntemlerine erişirsiniz.” – piojo

+0

Oh, tamam. Bir istisnayı atmak zorunda kalmadan, yığın izini kodunuzdaki belirli bir yerde kontrol etmek istiyorsunuz. –

İlgili konular