Как работает оператор Groovy в операторе?
Оператор Groovy "in" в разных случаях означает разные вещи. Иногда x in y
означает y.contains(x)
, и иногда он вызывает вызов y.isCase(x)
.
Как Groovy знает, какой из них вызывать? Есть ли определенный класс или набор классов, о которых Groovy знает, для чего используется метод .contains? Или поведение, вызванное существованием метода на одном из объектов? Существуют ли случаи, когда оператор in изменяется полностью на что-то другое?
Ответы
Ответ 1
Я сделал несколько экспериментов, и похоже, что оператор 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()
для этих классов.
Ответ 2
На самом деле все они основаны на isCase. Groovy добавляет метод isCase для коллекций, основанный на методе contains. Любой класс с isCase можно использовать с.