3

与えられた:

class FruitBasket {
    int apples = 0
    int oranges = 0
}

各 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()    
}

しかし、それは@実行時に不平を言っています

No such property: applePicker for class: FooTest

おそらくクロージャFruitBasket引数に問題があります...

4

2 に答える 2

6

そのコードでは、applePicker はメソッドであり、クロージャーではありません。

メソッドハンドルを使用して、次のようにメソッドをパラメーターとして渡すことができます。

processFruit(fruitList, this.&applePicker)

または、実際のクロージャーに変更します。

def applePicker = { FruitBasket f -> return f.getApples()    }
于 2012-07-24T15:32:38.540 に答える
1

に渡しapplePickerprocessFruitいますが、これはメソッドです。この方法でのみクロージャーを渡すことができます。applePicker次のようにクロージャとして再定義します。

applePicker = { FruitBasket f ->
    return f.getApples()
}

processFruitまたは、呼び出されたときにメソッドをクロージャーに変換します。

processFruit(fruitList, this.&applePicker)
于 2012-07-24T15:35:05.820 に答える