Sembra non funzioni la ricorsione


#1

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).


#2

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
To: 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



#3

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
To: 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.


#4

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

----- Original Message -----
From: “Roberto C.” removed_email_address@domain.invalid
To: 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

Comunque per sicurezza ho riprovato senza to_a() e non è cambiato nulla.


Posted via http://www.ruby-forum.com/.



#5

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


#6

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://thetyper.com
Email mailto://removed_email_address@domain.invalid
Skype callto://l.mearelli


#7

E’ strano. Mi è venuta in mente la soluzione mentre tornavo a casa da
scuola. :slight_smile:
Grazie per avermi dato l’implementazione della soluzione.

Ciao