Forum: Italian Ruby user group richiamare metodo all'interno dello stesso metodo?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
B0f6d8efcf671ea3163449e231264cc4?d=identicon&s=25 Msan Msan (msan)
on 2009-05-03 00:26
(Received via mailing list)
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
0df4a6c75caf1bd9b01d2dcbfb085ee4?d=identicon&s=25 Sandro Paganotti (Guest)
on 2009-05-03 02:06
(Received via mailing list)
bhe... sicuramente si può fare (pensa ad esempio a tutti i metodi
ricorsivi... :)
che poi faccia anche una cosa 'sensata' questo nin zo.. :D

Sandro

2009/5/2 Mauro <mrsanna1@gmail.com>
7de465f222e6a9c7fe658e370d0bfe05?d=identicon&s=25 Paolo Montrasio (pmontrasio)
on 2009-05-04 10:39
Msan Msan 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
This topic is locked and can not be replied to.