# Richiamare metodo all'interno dello stesso metodo?

**URL:** <https://www.ruby-forum.com/t/richiamare-metodo-allinterno-dello-stesso-metodo/167058>\
**Category:** IT\
**Created:** [May 3, 2009, 12:26am UTC](https://www.ruby-forum.com/t/richiamare-metodo-allinterno-dello-stesso-metodo/167058 "2009-05-03T00:26:14Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [May 3, 2009, 12:26am UTC](https://www.ruby-forum.com/t/richiamare-metodo-allinterno-dello-stesso-metodo/167058/1 "2009-05-03T00:26:14Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [May 3, 2009, 2:06am UTC](https://www.ruby-forum.com/t/richiamare-metodo-allinterno-dello-stesso-metodo/167058/2 "2009-05-03T02:06:46Z")

</div>

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

Sandro

2009/5/2 Mauro [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![msan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/3ab097/32.png) [@msan](https://www.ruby-forum.com/u/msan)\
**Post date:** [May 4, 2009, 10:39am UTC](https://www.ruby-forum.com/t/richiamare-metodo-allinterno-dello-stesso-metodo/167058/3 "2009-05-04T10:39:56Z")

</div>

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
