groovy
Gespreide operator
Zoeken…
Opmerkingen
In de meeste gevallen is de spread-operator *.
is identiek aan het aanroepen van .collect { it.________ }
.
def animals = ['cat', 'dog', 'fish']
assert animals*.length() == animals.collect { it.length() }
Maar als het onderwerp nul is, gedragen ze zich anders:
def animals = null
assert animals*.length() == null
assert animals.collect { it.length() } == []
Een methode aanroepen
assert ['cat', 'dog', 'fish']*.length() == [3, 3, 4]
Merk op dat bij het mixen van typen in de verzameling als de methode niet bestaat voor sommige elementen, een groovy.lang.MissingMethodException
kan worden gegenereerd:
['cat', 'dog', 'fish',3]*.length()
// it throws groovy.lang.MissingMethodException: No signature of method: java.lang.Integer.length()
Toegang tot een woning
class Vector {
double x
double y
}
def points = [
new Vector(x: 10, y: -5),
new Vector(x: -17.5, y: 3),
new Vector(x: -3.3, y: -1)
]
assert points*.x == [10, -17.5, -3.3]
Opmerking: de *
is optioneel. We kunnen ook de bovenstaande verklaring schrijven zoals in de onderstaande regel en de Groovy-compiler zou er nog steeds blij mee zijn.
assert points.x == [10, -17.5, -3.3]
Het is nulveilig
Als er een null
op de verzameling staat, wordt er geen NPE
, maar wordt een null
geretourneerd:
assert ['cat', 'dog', 'fish', null]*.length() == [3, 3, 4, null]
Door het direct in een null
, is het ook nulveilig:
def nullCollection = null
assert nullCollection*.length() == null
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow