groovy
Currying
Sök…
Syntax
- closure.curry (parameter)
- closure.rcurry (parameter)
- closure.ncurry (index, parametrar ...)
Anmärkningar
Currying en stängning ger en ny stängning med en eller flera av dess parametrar med ett fast värde
Vänster eller höger currying en stängning som inte har några parametrar eller indexbaserad currying en stängning som har mindre än två parametrar kastar en
IllegalArgumentException
Vänster currying
def pow = { base, exponent ->
base ** exponent
}
assert pow(3, 2) == 9
def pow2 = pow.curry(2) //base == 2
assert pow2(3) == 8
Rätt 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
Indexbaserad 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 stängning utan någon uttrycklig parameter
def noParam = {
"I have $it"
}
def noParamCurry = noParam.curry(2)
assert noParamCurry() == 'I have 2'
Curry-stängning utan parametrar
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow