2013-07-25 16 views
5

Mam nowe wymagania dotyczące obiektu Array. Dlatego muszę dodać własną metodę do wbudowanej klasy Array.Dodawanie nowej metody do klasy Array

Jak dodać nową metodę, aby niezależnie od obiektu Array, który utworzę, będzie również mieć moją metodę instancji?

+1

Google "ruby open classes" –

+2

To się nazywa [łatanie małp] (http://en.wikipedia.org/wiki/Monkey_patch) i jest robione przez cały czas. Nie ma nic szczególnego w klasach podstawowych, które uniemożliwiają dodawanie do nich metod. – tadman

Odpowiedz

13

Zastosowanie Ruby Open Classes:

class Array 
    def mymethod 
    #implementation 
    end 
end 
+0

Jeśli to zrobię, moje wcześniejsze obiekty tablicowe nie zostaną wbudowane w metody? – user2562153

+0

Były obiektami wbudowanej Tablicy i stały się przedmiotem mojej nowej klasy zwanej Array. Tak więc jedyną dostępną metodą dla tego obiektu jest nowo dodana metoda instancji. Na przykład Metoda uniq nie działa. Kiedy robię to obiekt.methods wszystko, co widzę, to moje własne metody modułowe (gdzie zdefiniowałem powyższy Array klasy) i niektóre metody modułu, w którym pierwotnie zdefiniowano Array. Jak mam się obejść? – user2562153

+0

@ user2562153 To nie jest twoja nowa klasa. To wciąż ta sama klasa 'Array', ze wszystkimi wbudowanymi metodami' Array'. –

6

innych odpowiedzi zasadzie pokazać można dodać metodę do klasy poprzez przedefiniowanie klasę, żeby dodać do tego, czego przykładem może być tak:

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

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

puts a.third