16

Groovy の "in" 演算子は、場合によって異なることを意味するようです。x in yを意味する場合y.contains(x)もあれば、呼ぶように見える場合もありますy.isCase(x)

Groovy は、どちらを呼び出すべきかをどのように判断しますか? .contains メソッドを使用することについて Groovy が認識している特定のクラスまたはクラスのセットはありますか? それとも、オブジェクトの 1 つでメソッドが存在することによって動作がトリガーされますか? in 演算子がまったく別のものに変更される場合はありますか?

4

3 に答える 3

17

私はいくつかの実験を行いましたが、次のコードで示されているように、オペレーターはメソッドのみinに基づいているようですisCase

class MyList extends ArrayList {
    boolean isCase(Object val) {
        return val == 66
    }
}

def myList = new MyList()
myList << 55
55 in myList // Returns false but myList.contains(55) returns true     
66 in myList // Returns true but myList.contains(66) returns false

JDKコレクションクラスの場合、これらのクラスを呼び出すため、inオペレーターが基づいているように見えると思います。contains()isCase()contains()

于 2010-01-14T23:45:14.577 に答える
4

実際にはすべて isCase に基づいています。Groovy は、 contains メソッドに基づくコレクションに isCase メソッドを追加します。isCase を持つ任意のクラスを in で使用できます。

于 2010-01-21T19:23:03.460 に答える