Come funziona il Groovy nel lavoro dell'operatore?
-
20-09-2019 - |
Domanda
Il Groovy "in" operatore sembra significare cose diverse in diversi casi. A volte x in y
significa y.contains(x)
ea volte sembra di chiamare y.isCase(x)
.
Come fa Groovy sa che uno di chiamare? C'è una particolare classe o un insieme di classi che Groovy conosce su quale utilizzare il metodo .contains? O è il comportamento innescato dall'esistenza di un metodo su uno degli oggetti? Ci sono dei casi in cui l'operatore in viene cambiato in qualcosa di completamente?
Soluzione
Ho fatto alcuni esperimenti e sembra che l'operatore in
si basa sul metodo isCase
solo come dimostra il seguente codice
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
Per le classi di raccolta JDK Credo che sembra proprio come l'operatore in
si basa su contains()
perché isCase()
richiede contains()
per le classi.
Altri suggerimenti
In realtà è tutto basato sulla isCase. Groovy aggiunge un metodo isCase alle collezioni che si basa sul metodo contiene. Ogni classe con isCase può essere utilizzato con in.