[ruby-it] Sembra non funzioni la ricorsione

Luca Mearelli luca.mearelli a gmail.com
Lun 5 Feb 2007 10:17:24 CET


Roberto Casadei wrote:
> 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}</option>"
>   end
> 
> 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}</option> \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}</option> \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}</option>"
   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://luca.mearelli@gmail.com
Skype callto://l.mearelli
--


Maggiori informazioni sulla lista Ml