2013-07-25 2 views
5

Ich habe eine neue Anforderung für Array-Objekt. Also muss ich der integrierten Array-Klasse meine eigene Methode hinzufügen.Hinzufügen einer neuen Methode zur Array-Klasse

Wie füge ich eine neue Methode hinzu, damit das von mir erstellte Array-Objekt auch meine Instanzmethode hat?

+1

Google "Ruby offene Klassen" –

+2

Es heißt [Affe Patching] (http://en.wikipedia.org/wiki/Monkey_patch) und es ist die ganze Zeit getan. Es gibt nichts Besonderes an den Kernklassen, das verhindert, dass Sie Methoden hinzufügen können. – tadman

Antwort

13

Verwendung Ruby Open Classes:

class Array 
    def mymethod 
    #implementation 
    end 
end 
+0

Wenn ich das mache, werden meine vorherigen Array-Objekte nicht in Methoden eingebaut? – user2562153

+0

Sie waren Objekte von eingebautem Array und wurden nun Objekt meiner neuen Klasse namens Array. Daher ist nur die Methode, die für dieses Objekt verfügbar ist, die neu hinzugefügte Instanzmethode. Für z. uniq-Methode funktioniert nicht mehr. Wenn ich diese object.methods mache, sehe ich nur meine eigenen Modulmethoden (wo ich die obige Klasse Array definiert habe) und einige Methoden des Moduls, wo das Array ursprünglich definiert ist. Wie komme ich um? – user2562153

+0

@ user2562153 Es ist nicht Ihre neue Klasse. Es ist immer noch dieselbe "Array" -Klasse mit allen eingebauten "Array" -Methoden. –

6

Die anderen Antworten zeigen im Grunde Sie durch die Neudefinition der Klasse eine Methode zur Klasse hinzufügen können, nur um hinzuzufügen, dass, könnte ein Beispiel so aussehen:

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

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

puts a.third