3

これが私がやりたいことです:

オブジェクトを操作する別のメソッド (またはクロージャー) をパラメーターとして受け入れることになっているという名前のメソッドを持つ、オブジェクトRowCollectionのコレクションを含むというクラスがあります。RoweditRow

Groovy スクリプトは、このクラスのオブジェクトを次のように使用します。

rc.edit({ it.setTitle('hello world') }); // it is a "Row" object

私の質問:

  1. の署名はRowCollection#editどのようになりますか?
  2. その実装はどのように見えるでしょうか?
4

2 に答える 2

3

別の方法として、適切なメソッドをRowCollection実装して提供すると、すべてのクラスに適用される標準の Groovy-JDK マジックが有効になります。Iterable<Row>iterator()

rc.each { it.title = "hello world" }

iteratorcollectfindAllinjectanyeverygrep.

于 2012-10-29T08:59:34.940 に答える
2

わかりました-少し掘り下げて、ここにあります:

class RowCollection {
    private List<Row> rows;

    // ...

    public void edit(Closure c) {
        for(Row r : rows) {
            c.call(r);
        }
    }

    // ...
}

クラス Closure はgroovy.langパッケージに含まれています。

于 2012-10-28T13:41:07.993 に答える