2013-07-25 12 views
5

Ho un nuovo requisito per l'oggetto Array. Quindi ho bisogno di aggiungere il mio metodo alla classe Array integrata.Aggiunta di un nuovo metodo alla classe Array

Come aggiungere un nuovo metodo in modo che qualsiasi oggetto Array che creo abbia anche il mio metodo di istanza?

+1

Google "ruby open classes" –

+2

Si chiama [patching scimmia] (http://en.wikipedia.org/wiki/Monkey_patch) ed è fatto tutto il tempo. Non c'è niente di speciale nelle classi di base che ti impedisce di aggiungere metodi a loro. – tadman

risposta

13

Uso Ruby Open Classes:

class Array 
    def mymethod 
    #implementation 
    end 
end 
+0

Se lo faccio, i miei oggetti dell'array precedente non vengono incorporati nei metodi ?? – user2562153

+0

Erano oggetti della matrice incorporata e ora sono diventati oggetto della mia nuova classe chiamata Array. Quindi, solo il metodo disponibile per quell'oggetto è il metodo di istanza appena aggiunto. Per es. il metodo uniq non funziona più. Quando faccio questo object.methods tutto quello che vedo sono i miei metodi di modulo (dove ho definito la precedente classe Array) e alcuni metodi del modulo in cui la matrice è stata originariamente definita. Come faccio ad andare in giro? – user2562153

+0

@ user2562153 Non è la tua nuova classe. È sempre la stessa classe 'Array', con tutte le build nei metodi' Array'. –

6

Le altre risposte mostrano in sostanza si può aggiungere un metodo alla classe ridefinendo la classe, solo per aggiungere a questo, un esempio potrebbe essere simile a questo:

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

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

puts a.third 
Problemi correlati