Grails - comportamento estranho em for aninhados

1 resposta
F

Senhores percebi no grails (acho que é do groovy mesmo) um comportamento estranho:

Suponha que exista um Array chamado montadoras, que refere-se as marcas (montadoras) e para cada marca existe um array de modelos (de carros). Inventei isto agora :lol:

montadoras.each{ montadora ->
        println montadora.getClass().name
        println montadora[0].getClass().name
    }

O resultado é

java.util.ArrayList
br.com.fausto.blabla.Montadora

Ou seja, quando ele itera pela colecao, cada item dela não é o objeto contido e sim um outro array de um item só, este item sendo o objeto esperado (montadora). Ao que parece o groovy/grails resolve essa questão sozinho p/ o usuário. Só que quando vc itera pelo segundo array (modelos) passa a ser necessário indicar a posicao.

Nao funciona:

montadoras.each{ montadora ->
        montadora.each{ modelo->
            println modelo.nome
        }  
    }

Tem que ser assim:

montadoras.each{ montadora ->
        montadora[0].each{ modelo->
            println modelo.nome
        }  
    }

O mesmo ocorre no gsp(jsp), na tag g:each.

Bizarro nao? :shock:

1 Resposta

B
groovy> def a = [[1,2],[3,4,5,6],[7],[8,9,0]]
groovy> a.each { b ->
groovy>   println b
groovy>   b.each { c ->
groovy>     println c
groovy>   }
groovy> }

[1, 2]
1
2
[3, 4, 5, 6]
3
4
5
6
[7]
7
[8, 9, 0]
8
9
0

Me parece normal.

Criado 14 de agosto de 2008
Ultima resposta 14 de ago. de 2008
Respostas 1
Participantes 2