moduller
Önceki
İçindekiler
İçindekiler
degiskenler
Sonraki

 Ruby Kullanıcı KılavuzuProsedü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.


moduller
Önceki
İçindekiler
İçindekiler
degiskenler
Sonraki