![]() Önceki |
![]() İçindekiler |
![]() Sonraki |
| Ruby Kullanıcı Kılavuzu | Prosedür nesneleri |
Beklenmeyen durumlara cevap verebilme genelde istenen bir durumdur. Eğer diğer metotlara kod bloklarını argüman olarak geçebilirsek yani koda bir veriymiş gibi davranabilirsek bu işi oldukça kolaylaştırmış oluruz.
Yeni bir prosedür nesnesi, proc kullanılarak oluşturuşur:
ruby> quux = proc {
| print "QUUXQUUXQUUX!!!\n"
| }
#<Proc:0x4017357c> |
Artık quux bir nesne olduğunu belirtiyor ve diğer nesneler gibi kullanılabilir özellikleri vardır. call metodu sayesinde bu özellikleri çalıştırabiliriz:
ruby> quux.call QUUXQUUXQUUX!!! nil |
Peki tüm bunlardan sonra, quux bir metot argümanı gibi kullanılabilir mi? Tabii ki.
ruby> def run( p )
| print "Bir prosedur cagirmak uzere...\n"
| p.call
| print "Bitti.\n"
| end
nil
ruby> run quux
Bir prosedur cagirmak uzere...
QUUXQUUXQUUX!!!
Bitti.
nil |
trap metodu aldığımız cevabı tercihimize göre istediğimiz sistem sinyaline atamamıza izin verir.
ruby> inthandler = proc{ print "^C was pressed.\n" }
#<Proc:0x401730a4>
ruby> trap "SIGINT", inthandler
#<Proc:0x401735e0> |
Normalde ^C 'ye basmak yorumlayıcıdan çıkmamızı sağlar. Ancak şimdi bir mesaj yazıldı ve yorumlayıcı hala çalışmaya devam ediyor, böylece yaptığınız işi kaybetmemiş oluyorsunuz. (Yorumlayıcıda sonsuza dek kapana kısılmadınız, hala exit yazarak ya da ^D 'ye basarak çıkabilirsiniz.)
Başka konulara geçmeden önce son bir not: bir prosedürü bir sinyale bağlamadan önce ona illa ki isim vermek gerekli değildir. Anonim bir prosedür nesnesi aşağıdaki gibi olabilir:
ruby> trap "SIGINT", proc{ print "^C was pressed.\n" }
nil |
ya da daha derli toplu olarak:
ruby> trap "SIGINT", 'print "^C was pressed.\n"' nil |
Bu kısaltılmış form, küçük anonim prosedürler yazdığınızda okunabilirlik sağlar.
![]() Önceki |
![]() İçindekiler |
![]() Sonraki |