groovy
Sprid operatör
Sök…
Anmärkningar
I de flesta fall spridningsoperatören *.
är identisk med att ringa .collect { it.________ }
.
def animals = ['cat', 'dog', 'fish']
assert animals*.length() == animals.collect { it.length() }
Men om ämnet är ogiltigt, uppträder de annorlunda:
def animals = null
assert animals*.length() == null
assert animals.collect { it.length() } == []
Ringa en metod
assert ['cat', 'dog', 'fish']*.length() == [3, 3, 4]
Observera att vid blandning av typer i samlingen om metoden inte finns på några av elementen, kan en groovy.lang.MissingMethodException
kastas:
['cat', 'dog', 'fish',3]*.length()
// it throws groovy.lang.MissingMethodException: No signature of method: java.lang.Integer.length()
Åtkomst till en fastighet
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]
Obs: *
är valfritt. Vi kan också skriva ovanstående uttalande som i nedanstående rad och Groovy-kompilatorn skulle fortfarande vara glad över det.
assert points.x == [10, -17.5, -3.3]
Det är noll-säkert
Om det finns en null
objekt på samlingen inte kastar en NPE
, returneras en null
istället:
assert ['cat', 'dog', 'fish', null]*.length() == [3, 3, 4, null]
Att använda det direkt i ett null
objekt är det också noll-säkert:
def nullCollection = null
assert nullCollection*.length() == null
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow