groovy
Currying
Suche…
Syntax
- Schließungscurry (Parameter)
- Schließung.curry (Parameter)
- Schließung.ncurry (Index, Parameter ...)
Bemerkungen
Das Currying eines Abschlusses erzeugt einen neuen Abschluss mit einem oder mehreren seiner Parameter, die einen festen Wert haben
Links oder rechts, die eine Schließung ohne Parameter oder indexbasierte Schließung mit weniger als zwei Parametern
IllegalArgumentException
eineIllegalArgumentException
Links Currying
def pow = { base, exponent ->
base ** exponent
}
assert pow(3, 2) == 9
def pow2 = pow.curry(2) //base == 2
assert pow2(3) == 8
Richtiges Currying
def dividable = { a, b ->
a % b == 0
}
assert dividable(2, 3) == false
assert dividable(4, 2) == true
def even = dividable.rcurry(2) // b == 2
assert even(2) == true
assert even(3) == false
Indexbasiertes Currying
def quatNorm = { a, b, c, d ->
Math.sqrt(a*a + b*b + c*c + d*d)
}
assert quatNorm(1, 4, 4, -4) == 7.0
def complexNorm = quatNorm.ncurry(1, 0, 0) // b, c == 0
assert complexNorm(3, 4) == 5.0
Currying-Abschluss ohne expliziten Parameter
def noParam = {
"I have $it"
}
def noParamCurry = noParam.curry(2)
assert noParamCurry() == 'I have 2'
Currying-Schließung ohne Parameter
def honestlyNoParam = { ->
"I Don't have it"
}
// The following all throw IllegalArgumentException
honestlyNoParam.curry('whatever')
honestlyNoParam.rcurry('whatever')
honestlyNoParam.ncurry(0, 'whatever')
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow