arity
de una función es el número de argumentos que requiere. Currying
una función significa convertir una función de N arity
en N funciones de arity
1.
En otras palabras, reestructura una función para que tome un argumento, luego devuelva otra función que tome el siguiente argumento, y así sucesivamente.
Aquí hay un ejemplo:
//Un-curried functionEsto es útil en su programa si no puede suministrar todos los argumentos a una función al mismo tiempo. Puede guardar cada llamada de función en una variable, que mantendrá la referencia de función devuelta que toma el siguiente argumento cuando esté disponible. Aquí hay un ejemplo que usa la función
function unCurried(x, y) {
return x + y;
}
//Curried function
function curried(x) {
return function(y) {
return x + y;
}
}
curried(1)(2) // Returns 3
curried
en el ejemplo anterior:
// Call a curried function in parts:De manera similar,
var funcForY = curried(1);
console.log(funcForY(2)); // Prints 3
partial application
puede describirse como la aplicación de algunos argumentos a una función a la vez y la devolución de otra función que se aplica a más argumentos.
Aquí hay un ejemplo:
//Impartial function
function impartial(x, y, z) {
return x + y + z;
}
var partialFn = impartial.bind(this, 1, 2);
partialFn(10); // Returns 13
add
para que use el curry para agregar los parámetros x
, y
y z
.
add(10)(20)(30)
debe devolver 60
.
testString: 'assert(add(10)(20)(30) === 60, "add(10)(20)(30)
should return 60
.");'
- text: add(1)(2)(3)
debe devolver 6
.
testString: 'assert(add(1)(2)(3) === 6, "add(1)(2)(3)
should return 6
.");'
- text: add(11)(22)(33)
debe devolver 66
.
testString: 'assert(add(11)(22)(33) === 66, "add(11)(22)(33)
should return 66
.");'
- text: Su código debe incluir una declaración final que devuelva x + y + z
.
testString: 'assert(code.match(/[xyz]\s*?\+\s*?[xyz]\s*?\+\s*?[xyz]/g), "Your code should include a final statement that returns x + y + z
.");'
```