2013-07-25 14 views
5

için yeni bir yöntem eklemek Array nesnesi üzerinde yeni bir gereksinim var. Bu yüzden kendi yöntemimi yerleşik Array sınıfına eklemem gerekiyor.Array sınıfı

Oluşturduğum Array nesnesi ne olursa olsun, örnek yöntemim de olacak şekilde yeni bir yöntemi nasıl eklerim?

+1

Google "ruby açık sınıflar" –

+2

Bu [maymun yama] denir (http://en.wikipedia.org/wiki/Monkey_patch) ve her zaman yapılır. Çekirdek sınıflar hakkında, onlara yöntem eklemenizi engelleyen özel bir şey yoktur. – tadman

cevap

13

Kullanım Ruby Open Classes:

class Array 
    def mymethod 
    #implementation 
    end 
end 
+0

Bunu yaparsam, önceki dizi nesneler yöntemlerde oluşturulmuyor mu? – user2562153

+0

Bunlar, yerleşik Array nesnesiydi ve şimdi Array adlı yeni sınıfımın nesnesi haline geldi. Bu nedenle, bu nesne için yalnızca yeni yöntem yeni eklenen örnek yöntemidir. Örneğin için. uniq yöntemi artık çalışmıyor. Bu nesneyi gerçekleştirdiğimde, gördüğüm her şey kendi modül yöntemlerim (yukarıdaki sınıf dizisini tanımladığım) ve dizinin özgün olarak tanımlandığı modülün bazı yöntemleri. Nasıl dolaşırım? – user2562153

+0

@ user2562153 Yeni sınıfınız bu değil. Array'ın tüm yöntemleri ile hala "Array" sınıfı aynı. –

6

diğer cevaplar temelde sadece eklemek, sınıfı yeniden tanımlanarak sınıfa bir yöntem ekleyebilirsiniz göstermek, bir örnek şöyle olabilir:

class Array 
    def third 
     size > 2 ? self[2] : nil 
    end 
end 

a = [1, 2, 3, 4, 5] 

puts a.third