groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kurt Andrews <kurt.w.andr...@gmail.com>
Subject Re: closures and iterators
Date Mon, 15 Jun 2015 14:14:27 GMT
Thank you gentlemen, you've been a great help.  This does exactly what I
need:

<code>
response.data.each { owner ->
  owner.children.each { dealer ->
    dealer.children.each { location ->
      location.children.each { grower ->
        println([grower.type, grower.profile_id, grower.name,
grower.created, grower.modified, "", ""].join("|"))
        grower.children.each { farm ->
          println([farm.type, farm.farm_id, farm.name, farm.created,
farm.modified, grower.profile_id, ""].join("|"))
          farm.children.each { field ->
            println([field.type, field.field_id, field.name, field.created,
field.modified, grower.profile_id, farm.farm_id].join("|"))}}}}}}
</code>

On Mon, Jun 15, 2015 at 8:32 AM David Clark <plotinussmith@gmail.com> wrote:

>  Yes. My mistake, thank you for the correction.
>
>
> On 06/15/2015 04:43 AM, Dinko Srkoč wrote:
>
>  One should be careful about those nested its where explicit Closure
> parameters are used:
>
> response.data.each { it.children.each { it.children.each {
>     // scope X here
>     it.children.each { grower ->
>         println ...
>         // it.children.each { farm -> ... 'it' comes from scope X
>         grower.children.each { farm -> // ok
>             println ...
>             // it.children.each { field -> ... 'it' is still from scope X
>             farm.children.each { field -> // ok
>                 println ...
>             }
>         }
>     }
> }}}
>
> Cheers,
> Dinko
> ​
>
> On 15 June 2015 at 07:19, David Clark <plotinussmith@gmail.com> wrote:
>
>>  Try something like this:
>>
>> response.data.each {
>>   it.children.each {
>>     it.children.each {
>>       it.children.each { grower ->        println([grower.type, grower.profile_id,
grower.name <http://it.name>, grower.created, grower.modified, "", ""].join("|"))
>>         it.children.each { farm ->          println([farm.type, farm.farm_id,
farm.name <http://it.name>, farm.created, farm.modified, grower.profile_id, ""].join("|"))
>>           it.children.each { field ->            println([field.type, field.field_id,
field.name <http://it.name>, field.created, field.modified, grower.profile_id, farm.farm_id].join("|"))
} } } } } }
>>
>> Moving the brackets is optional, it just hurts my eyes to see all of
>> those dangling angle brackets each on a line by itself.
>>
>>
>> On 06/14/2015 11:45 PM, Kurt Andrews wrote:
>>
>> I'm trying to figure out how to pass an extra parameter to the closure
>> that's being passed to each in the following code
>>
>>  response.data.each {
>>   it.children.each {
>>     it.children.each {
>>       it.children.each { // growers        println([it.type, it.profile_id, it.name,
it.created, it.modified, "", ""].join("|"))
>>         it.children.each { // farms          println([it.type, it.farm_id, it.name,
it.created, it.modified, grower.profile_id, ""].join("|"))
>>           it.children.each { // fields            println([it.type, it.field_id,
it.name, it.created, it.modified, grower.profile_id, farm.farm_id].join("|"))
>>           }
>>         }
>>       }
>>     }
>>   }
>> }
>>
>>  I'm trying to pass the grower profile_id down to the farms and the
>> fields and pass the farms farm_id down to fields.   Is there a simple way
>> to do this?
>>
>>  Thanks,
>>
>>  Kurt
>>
>>
>>
>
>

Mime
View raw message