groovy
Карринг
Поиск…
Синтаксис
- closure.curry (параметр)
- closure.rcurry (параметр)
- close.ncurry (индекс, параметры ...)
замечания
Завершение замыкания создает новое замыкание с одним или несколькими его параметрами, имеющими фиксированное значение
Влево или вправо каррирование замыкания, которое не имеет параметров или индексов, основанных на закрытии, которое имеет менее двух параметров, вызывает исключение
IllegalArgumentException
Левый карри
def pow = { base, exponent ->
base ** exponent
}
assert pow(3, 2) == 9
def pow2 = pow.curry(2) //base == 2
assert pow2(3) == 8
Правый карри
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'
Закрытие каррирования без параметров
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