facendo le mie prime prove in Ruby mi è venuto in mente di scrivere una
versione di detect diversa da quella di Enumerable:
module Extention1
def detect()
res_array = []
if ( self.respond_to?(“each”) )
self.each do
|element|
res = yield(element)
if( res ==true )
res_array.push(element)
end
end
return res_array
else return nil
end
end
end
poi per inclusione in Array:
class Array
include Extention1
end
array_result = [1,2,3].detect(){…}
a questo punto, come faccio a far convivere le due versioni di detect,
cioè la mia e quella che Array include da Enumerable?
per fare quello che chiedi, ti basta creare un alias per il vecchio detect prima di sovrascriverlo:
class Array
alias old_detect detect # creo l’alias
include Extention1 # poi lo sovrascrivo
end
a questo punto se hai bisogno dell’originale, potrai chiamarlo con
old_detect
capisco che stai facendo degli esperimenti didattici, tuttavia tieni
presente che sovrascrivere il metodo di una classe cos importante
potrebbe portare a strani comportamenti difficili da individuare e
correggere. in ogni caso, puoi ottenere lo stesso risultato (evitando i
pericoli descritti) semplicemente creando una classe ad-hoc che si
comporta come un array ed inserendo/sovrascrivendo i metodi che ti
occorrono