прямой способ передать все необходимые параметры для закрытия:
def teams = ['x', 'y', 'z']
def list = [ [id:1, team1: 'x', team2:'y' ], [id:2, team1: 'z', team2:'y' ]]
def function = { closure -> teams.inject( [:]) { result, team ->
result[team] = list.findAll{closure(team,it)}.size()
result
} }
def t = {x1,x2-> x1 in [x2.team1, x2.team2]}
println function(t)
или вы можете использовать rehydrate
, но у вас нет доступа к параметрам закрытия:
def f = {_x,_y, closure->
def x = _x
def y = _y
closure.rehydrate(this,this,this).call()
}
println f(111,222, {x+y}) //this works
println f(111,222, {_x+_y}) //this fails