Эти it
переменные являются , а не итераторами, они являются замыканием параметрами. Имя it
не является коротким для «итератора», оно буквально означает «оно» и используется в качестве имени по умолчанию для замыканий с одним параметром. Тем не менее, вы можете использовать явные (и, следовательно, разные вложенные) имена, такие как:
it.myprojects.project.each{ project ->
println("Project name: " + project.projectName)
project.myroles.role.each{ role->
Role r= new Role()
r.setName(project.projectName)
}
}
На самом деле, я бы советовал вообще не использовать метод each
и использовать вместо этого реальные циклы:
for(project in it.myprojects.project){
println("Project name: " + project.projectName)
for(role in project.myroles.role){
Role r= new Role()
r.setName(project.projectName)
}
}
Это лучше, потому что замыкания делают код более трудным для отладки, а также потенциально медленнее. И в этом случае в любом случае нет никакого преимущества в использовании замыканий.