鉴于:
class FruitBasket {
int apples = 0
int oranges = 0
}
Run Code Online (Sandbox Code Playgroud)
我需要从每个FruitBasket中挑选苹果.这项工作需要在processFruit中完成:
def processFruit(list, picker) {
list.each {
println "processing " + picker(it)
}
}
def processAll() {
List fruitList = [
new FruitBasket("apples": 2, "oranges": 4),
new FruitBasket("apples": 3, "oranges": 5)
]
processFruit(fruitList, applePicker)
}
def applePicker(FruitBasket f) {
return f.getApples()
}
Run Code Online (Sandbox Code Playgroud)
但它正在抱怨@运行时
No such property: applePicker for class: FooTest
Run Code Online (Sandbox Code Playgroud)
可能是关闭水果篮子的问题...
在该代码中,applePicker是一个方法,而不是一个闭包.
您可以使用方法句柄将方法作为参数传递,如下所示:
processFruit(fruitList, this.&applePicker)
Run Code Online (Sandbox Code Playgroud)
或者将其更改为实际闭包:
def applePicker = { FruitBasket f -> return f.getApples() }
Run Code Online (Sandbox Code Playgroud)