# Sembra non funzioni la ricorsione

**URL:** <https://www.ruby-forum.com/t/sembra-non-funzioni-la-ricorsione/84437>\
**Category:** IT\
**Created:** [February 4, 2007, 4:19pm UTC](https://www.ruby-forum.com/t/sembra-non-funzioni-la-ricorsione/84437 "2007-02-04T16:19:29Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![robyonrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/b5ac83/32.png) [@robyonrails](https://www.ruby-forum.com/u/robyonrails)\
**Post date:** [February 4, 2007, 4:19pm UTC](https://www.ruby-forum.com/t/sembra-non-funzioni-la-ricorsione/84437/1 "2007-02-04T16:19:29Z")

</div>

Ho fatto una cosa del genere:

def getTree  
for child in self.getChilds.to\_a  
child.getTree  
end  
“\<option value=”#{self.id}"\>#{’-’\*self.getNumAncestors}  
#{self.title}"  
end

Per scorrere lungo una generarchia, purtroppo si ferma oltre il primo  
livello.

Se all’interno del for faccio qualcosa tipo  
child.title  
mi restituisce il titolo, cosa che non accade attraverso child.getTree.

La funzione Ã¨ richiamata da un template rhtml (nomeistanza.getTree).

---

<div class="post-metadata">

**Author:** ![robyonrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/b5ac83/32.png) [@robyonrails](https://www.ruby-forum.com/u/robyonrails)\
**Post date:** [February 4, 2007, 4:56pm UTC](https://www.ruby-forum.com/t/sembra-non-funzioni-la-ricorsione/84437/2 "2007-02-04T16:56:47Z")

</div>

domanda, perchÃ¨ usi to\_a?  
puÃ² essere questo che ti blocca tutto?  
Magari sbaglio ma puÃ² essere che la conversione in array faccia perdere  
qualche informazione sulla struttura del tuo oggetto.

Saluti Andrea

----- Original Message -----  
From: “Roberto C.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Sent: Sunday, February 04, 2007 4:19 PM  
Subject: [ruby-it] Sembra non funzioni la ricorsione

> Per scorrere lungo una generarchia, purtroppo si ferma oltre il primo

* * *

---

<div class="post-metadata">

**Author:** ![robyonrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/b5ac83/32.png) [@robyonrails](https://www.ruby-forum.com/u/robyonrails)\
**Post date:** [February 4, 2007, 5:01pm UTC](https://www.ruby-forum.com/t/sembra-non-funzioni-la-ricorsione/84437/3 "2007-02-04T17:01:32Z")

</div>

stb wrote:

> domanda, perchÃ¨ usi to\_a?  
> puÃ² essere questo che ti blocca tutto?  
> Magari sbaglio ma puÃ² essere che la conversione in array faccia perdere  
> qualche informazione sulla struttura del tuo oggetto.
> 
> Saluti Andrea
> 
> ----- Original Message -----  
> From: “Roberto C.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> Sent: Sunday, February 04, 2007 4:19 PM  
> Subject: [ruby-it] Sembra non funzioni la ricorsione
> 
> > Per scorrere lungo una generarchia, purtroppo si ferma oltre il primo
> 
> * * *

Lo uso perchÃ¨ a volte dÃ errore in quanto uso il metodo each() su una  
variabile non-array (un solo record).

Comunque per sicurezza ho riprovato senza to\_a() e non Ã¨ cambiato nulla.

---

<div class="post-metadata">

**Author:** ![robyonrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/b5ac83/32.png) [@robyonrails](https://www.ruby-forum.com/u/robyonrails)\
**Post date:** [February 4, 2007, 5:38pm UTC](https://www.ruby-forum.com/t/sembra-non-funzioni-la-ricorsione/84437/4 "2007-02-04T17:38:55Z")

</div>

prova a usare mmmm inspect se non sbaglio almeno vedi com’Ã¨ composto l’  
oggetto.

----- Original Message -----  
From: “Roberto C.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Sent: Sunday, February 04, 2007 5:01 PM  
Subject: [ruby-it] Re: Sembra non funzioni la ricorsione

> > To: [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)
> 
> Comunque per sicurezza ho riprovato senza to\_a() e non Ã¨ cambiato nulla.
> 
> –  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

* * *

---

<div class="post-metadata">

**Author:** ![robyonrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/b5ac83/32.png) [@robyonrails](https://www.ruby-forum.com/u/robyonrails)\
**Post date:** [February 4, 2007, 10:11pm UTC](https://www.ruby-forum.com/t/sembra-non-funzioni-la-ricorsione/84437/5 "2007-02-04T22:11:22Z")

</div>

Il giorno dom, 04/02/2007 alle 17.01 +0100, Roberto C. ha scritto:

> stb wrote:
> 
> > domanda, perchÃ¨ usi to\_a?

> Lo uso perchÃ¨ a volte dÃ errore in quanto uso il metodo each() su una  
> variabile non-array (un solo record).

Non c’entra con la soluzione al tuo problema, ma avere un metodo che a  
volte restituisce un array e a volte un elemento singolo non rompe il  
contratto del metodo? Non ti converrebbe mettere #to\_a all’interno di  
#getChilds ?

Giovanni

---

<div class="post-metadata">

**Author:** ![robyonrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/b5ac83/32.png) [@robyonrails](https://www.ruby-forum.com/u/robyonrails)\
**Post date:** [February 5, 2007, 10:19am UTC](https://www.ruby-forum.com/t/sembra-non-funzioni-la-ricorsione/84437/6 "2007-02-05T10:19:05Z")

</div>

Roberto C. wrote:

> Per scorrere lungo una generarchia, purtroppo si ferma oltre il primo  
> livello.

Ok, magari non hai riportato il codice completamente, ma… quello che  
fai nel ciclo for e’ chiamare la getTree per ciascun figlio, ma non ti  
memorizzi il valore di ritorno. Cosi alla fine dalla funzione  
restituisci solo la stringa per il nodo su cui la chiami (e.g. solo la  
radice dell’albero).

un paio di esempi su come farlo:

def getTree\_2  
childs\_string = “”  
for child in self.getChilds.to\_a  
childs\_string += child.getTree\_2  
end  
"\<option value="#{self.id}"\>#{‘-’\*self.getNumAncestors}

> #{self.title} \n#{childs\_string}"  
> end

def getTree\_3  
child\_trees = self.getChilds.to\_a.map{|c| c.getTree\_3 }  
"\<option value="#{self.id}"\>#{‘-’\*self.getNumAncestors}

> #{self.title} \n#{child\_trees.join}"  
> end

oppure (da usare con un blocco sulla pagina):

def getTree\_4  
yield “\<option value="#{self.id}"\>#{‘-’\*self.getNumAncestors}  
#{self.title}”  
for child in self.getChilds.to\_a  
child.getTree\_4{|t| yield t }  
end  
end

## ciao Luca

Web: [http://spazidigitali.com](http://spazidigitali.com) - [http://thetyper.com](http://thetyper.com)  
Email mailto://removed\_email\_address@domain.invalid  
Skype callto://l.mearelli

---

<div class="post-metadata">

**Author:** ![robyonrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/b5ac83/32.png) [@robyonrails](https://www.ruby-forum.com/u/robyonrails)\
**Post date:** [February 5, 2007, 5:29pm UTC](https://www.ruby-forum.com/t/sembra-non-funzioni-la-ricorsione/84437/7 "2007-02-05T17:29:58Z")

</div>

E’ strano. Mi Ã¨ venuta in mente la soluzione mentre tornavo a casa da  
scuola. 🙂  
Grazie per avermi dato l’implementazione della soluzione.

Ciao
