2010-02-11 23 views
9

kullanmak için basit yakut işlevini yeniden yazın Doğru terminolojiyi bilmiyorum. Google'ı denedim ve bu nedenle hiçbir şey bulamadım.Bir bloğu

Ben Ruby kitaplığı yazıyorum ve onlar aşağıda çalışmak yüzden okunabilirlik için tercih gibi işlevleri yeniden yazmak istiyorum (bir bloğun içine?)

Bu

@dwg = Dwg.new("test.dwg") 
@dwg.line([0,0,0],[1,1,0]) 
@dwg.save 
yapan bir fonksiyonu var

Ben size bu konuda gitmek yolu ana hatlarıyla Can bu

Dwg.new("test.dwg") do 

    line([0,0,0],[1,1,0]) 
    save 

end 

gibi çalışır böylece yeniden yazmak istiyor?

+1

Eğer "kaydet" denilen bir yöntem yararlı olabilir Bir blok kullanmıyorsanız, ancak bir blok kullanıyorsanız gereksiz olmaz mı? –

+0

iyi bir nokta, özellikle dosya adının – ADAM

cevap

15

Bir blok almaya Dwg 'ın başlatıcı tanımlamak ve sonra gibi pek, instance_eval o bloğa verebilmesidir:

class MyClass 
    def initialize(name, &block) 
    @name = name 
    instance_eval &block 
    end 

    def show_name 
    puts 'My name is ' + @name 
    end 
end 

MyClass.new('mud') do 
    show_name 
end 

# >> My name is mud 

fazla bilgi için, bölümünün 'Arayüz Basitleştirme için Blocks' bakın Son zamanlarda Creative-Commons lisanslı Gregory Brown'un Chapter 2 mükemmel Ruby Best Practices kitabı. (Yazarı ve yayıncısı yavaş yavaş tüm işi CCing yapıyor, ancak elbette bu işi desteklemek için bir kopya satın alabilirsiniz. IPhone sürümü özellikle uygun.)

+0

fonksiyonuna geçtiğinden beri teşekkürler! – ADAM

+11

"instance_eval & block" satırını "instance_eval" ve "block_given olursa blok" olarak değiştirdiğinizden emin olun, aksi takdirde "new" 'in blok olmadan çağrılmasını istiyorsanız, aksi takdirde "ArgumentError: block not included" ifadesini alırsınız. yap. – mikej