groovy
Currying
Zoeken…
Syntaxis
- closure.curry (parameter)
- closure.rcurry (parameter)
- closing.ncurry (index, parameters ...)
Opmerkingen
Een afsluiting curren produceert een nieuwe afsluiting met een of meer van zijn parameters met een vaste waarde
Links of rechts curren van een afsluiting zonder parameters of
IllegalArgumentException
een afsluiting met minder dan twee parameters gooit eenIllegalArgumentException
Links currying
def pow = { base, exponent ->
base ** exponent
}
assert pow(3, 2) == 9
def pow2 = pow.curry(2) //base == 2
assert pow2(3) == 8
Rechts 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
Op index gebaseerde curry
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
Currysluiting zonder expliciete parameter
def noParam = {
"I have $it"
}
def noParamCurry = noParam.curry(2)
assert noParamCurry() == 'I have 2'
Currysluiting zonder parameters
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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow