Forum: Italian Ruby user group Sembra non funzioni la ricorsione

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.
421f0a0ddf91f441710930ae777923eb?d=identicon&s=25 Roberto Casadei (robyonrails)
on 2007-02-04 16:19
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.

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).
Bc5a89955ee201026441d07d1024cc24?d=identicon&s=25 stb (Guest)
on 2007-02-04 16:56
(Received via mailing list)
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 Casadei" <robyonrails@katamail.com>
To: <ml@lists.unbit.it>
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
>
--------------------------------------------------------------------------------
421f0a0ddf91f441710930ae777923eb?d=identicon&s=25 Roberto Casadei (robyonrails)
on 2007-02-04 17:01
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 Casadei" <robyonrails@katamail.com>
> To: <ml@lists.unbit.it>
> 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.
Bc5a89955ee201026441d07d1024cc24?d=identicon&s=25 stb (Guest)
on 2007-02-04 17:38
(Received via mailing list)
prova a usare mmmm inspect se non sbaglio almeno vedi com'è composto l'
oggetto.

----- Original Message -----
From: "Roberto Casadei" <robyonrails@katamail.com>
To: <ml@lists.unbit.it>
Sent: Sunday, February 04, 2007 5:01 PM
Subject: [ruby-it] Re: Sembra non funzioni la ricorsione


>> To: <ml@lists.unbit.it>
>
> Comunque per sicurezza ho riprovato senza to_a() e non è cambiato nulla.
>
> --
> Posted via http://www.ruby-forum.com/.
>


--------------------------------------------------------------------------------
652a08873b41cf44e456b54927c097a5?d=identicon&s=25 Giovanni Corriga (Guest)
on 2007-02-04 22:11
(Received via mailing list)
Il giorno dom, 04/02/2007 alle 17.01 +0100, Roberto Casadei 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
05720447a341aaffb8827039df3931df?d=identicon&s=25 Luca Mearelli (Guest)
on 2007-02-05 10:19
(Received via mailing list)
Roberto Casadei 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}</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
421f0a0ddf91f441710930ae777923eb?d=identicon&s=25 Roberto Casadei (robyonrails)
on 2007-02-05 17:29
E' strano. Mi è venuta in mente la soluzione mentre tornavo a casa da
scuola. :-)
Grazie per avermi dato l'implementazione della soluzione.

Ciao
This topic is locked and can not be replied to.