수색…
통사론
- closure.curry (매개 변수)
- closure.rcurry (매개 변수)
- closure.ncurry (인덱스, 매개 변수 ...)
비고
Closure를 Currying하면 하나 이상의 고정 된 값을 가진 매개 변수가있는 새 Closure가 생성됩니다.
매개 변수가없는 클로저를 왼쪽 또는 오른쪽으로 키잉하거나 매개 변수가 두 개 미만인 클로저를 숨기는 경우
IllegalArgumentException
throw합니다.
왼쪽 카레
def pow = { base, exponent ->
base ** exponent
}
assert pow(3, 2) == 9
def pow2 = pow.curry(2) //base == 2
assert pow2(3) == 8
오른쪽 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
색인 기반의 커링
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 클로저
def noParam = {
"I have $it"
}
def noParamCurry = noParam.curry(2)
assert noParamCurry() == 'I have 2'
매개 변수없이 닫는 Curle
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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow