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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top