Groovy tiene un concepto que llama "currying". Aquí hay un ejemplo de su wiki:
def divide = { a, b -> a / b }
def halver = divide.rcurry(2)
assert halver(8) == 4
Mi comprensión de lo que está pasando aquí es que el argumento de la mano derecha de divide
está vinculado al valor 2. Esto parece ser una forma de aplicación parcial.
El término currying se usa generalmente para significar la transformación de una función que toma una serie de argumentos en una función que solo toma un argumento y devuelve otra función. Por ejemplo, aquí está el tipo de función curry
en Haskell:
curry :: ((a, b) -> c) -> (a -> (b -> c))
Para las personas que no han usado Haskell a
, b
y c
son parámetros genéricos. curry
toma una función con dos argumentos, y devuelve una función que toma a
y devuelve una función de b
a c
. He agregado un par adicional de corchetes al tipo para que esto quede más claro.
¿He malinterpretado lo que está pasando en el ejemplo genial o es simplemente una aplicación parcial con un nombre erróneo? O, de hecho, hace ambas cosas: es decir, convertir divide
en una función de curry y luego aplicar parcialmente 2
a esta nueva función.