Поиск…


Синтаксис

  • 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