Как делает Groovy в работе оператора?

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

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

13
задан Dónal 14 January 2010 в 23:30
поделиться

2 ответа

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

15
ответ дан 1 December 2019 в 23:31
поделиться

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

3
ответ дан 1 December 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: