Richiamare metodo all'interno dello stesso metodo?


#1

E’ corretto questo esempio?
L’ho trovato in un manuale.
Sembra che venga usato un metodo all’interno della definizione dello
stesso metodo.

def copy
event = Event.find(params[:id])
@event = Event.copy(event)

render

end


#2

bhe… sicuramente si può fare (pensa ad esempio a tutti i metodi
ricorsivi… :slight_smile:
che poi faccia anche una cosa ‘sensata’ questo nin zo… :smiley:

Sandro

2009/5/2 Mauro removed_email_address@domain.invalid


#3

Msan M. wrote:

E’ corretto questo esempio?
L’ho trovato in un manuale.
Sembra che venga usato un metodo all’interno della definizione dello
stesso metodo.

def copy
event = Event.find(params[:id])
@event = Event.copy(event)

render

end

Non è lo stesso metodo.

Il copy che viene definito è un metodo di istanza, mentre Event.copy è
un metodo di classe definito altrove come

def Event.copy

oppure come

def self.copy

(e ci sono altri modi ancora)

Comunque sì, ha senso avere metodi che si richiamano. L’esempio per
eccellenza è il calcolo del fattoriale

def fact(n)
n == 0 ? 1 : n * fact(n - 1)
end

ma pensa anche alla colorazione di un’area: si parte da un pixel e
ricorsivamente si colorano tutti i vicini finché non si arriva ad un
confine. Non è facile trovare una soluzione non ricorsiva che funzioni
con qualsiasi forma dell’area da colorare, ma scritto ricorsivamente
l’algoritmo è molto semplice.

Paolo