Как работает Groovy в операторе? - PullRequest
13 голосов
/ 15 января 2010

Оператор Groovy «in» в разных случаях означает разные вещи. Иногда x in y означает y.contains(x), а иногда кажется, что y.isCase(x).

Как Groovy узнает, кому звонить? Есть ли определенный класс или набор классов, о которых Groovy знает, которые используют метод .contains? Или поведение вызвано существованием метода на одном из объектов? Есть ли случаи, когда оператор in полностью превращается во что-то другое?

Ответы [ 2 ]

15 голосов
/ 15 января 2010

Я провел некоторые эксперименты, и похоже, что оператор 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() для этих классов.

3 голосов
/ 21 января 2010

На самом деле все основано на isCase. Groovy добавляет в коллекцию метод isCase, основанный на методе содержимого. Любой класс с isCase можно использовать с in.

...