如何使用Groovy闭包选择特定字段
鉴于: 我需要从每个果篮里挑选苹果。工作需要在以下过程中完成:如何使用Groovy闭包选择特定字段,groovy,closures,Groovy,Closures,鉴于: 我需要从每个果篮里挑选苹果。工作需要在以下过程中完成: class FruitBasket { int apples = 0 int oranges = 0 } 但它抱怨说 def processFruit(list, picker) { list.each { println "processing " + picker(it) } } def processAll() { List fruitList = [
class FruitBasket {
int apples = 0
int oranges = 0
}
但它抱怨说
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()
}
闭包果篮参数可能有问题…在该代码中,applePicker是一个方法,而不是闭包 您可以使用方法句柄将方法作为参数传递,如下所示:
No such property: applePicker for class: FooTest
applePicker = { FruitBasket f ->
return f.getApples()
}
或者将其更改为实际关闭:
processFruit(fruitList, this.&applePicker)
您正在将
applePicker
传递给processFruit
,但它是一种方法。您只能通过这种方式传递闭包。将applePicker
重新定义为一个闭包,如下所示:
def applePicker = { FruitBasket f -> return f.getApples() }
或者在调用processFruit
时将方法转换为闭包:
processFruit(fruitList, this.&applePicker)