Aprendiendo dos, curry

Cuando una función tiene varios parámetros, puede pasar algunos parámetros primero, y estos parámetros no volverán a cambiar.

Luego, devuelva una nueva función para recopilar los parámetros restantes y devuelva el resultado: esto es curry

 

El método de curado en adash:

Parámetro _.curry (func): la función que debe curry, y el valor de retorno es el parámetro después de curry.
 

const _ = require('lodash');

function getSum(a, b, c) {
    return a + b + c;
}

const curried = _.curry(getSum);
console.log(curried(1, 2, 3));
console.log(curried(1)(2, 3));
console.log(curried(1, 2)(3));

const match = _.curry(function (reg, str) {
    return str.match(reg)
})

const haveSpace = match(/\s+/g);
const haveNumber = match(/\d+/g);
console.log(haveSpace('hello  world'));
console.log(haveNumber('123abc123'));

const filter = _.curry(function (func, array) {
    return array.filter(func)
})
const findSpace = filter(haveSpace)
console.log(filter(haveSpace, ['John Connor', 'John_Donne']))
console.log(findSpace(['John Connor', 'John_Donne']))

Currying nos permite generar una nueva función, y esta nueva función tiene memorizados ciertos parámetros fijos.

Dentro de la función se forma un cierre, una especie de caché para la función.

Haga la función más flexible y reduzca la granularidad de la función.

Con el curry, puede convertir múltiples funciones en funciones unarias y puede combinar funciones para producir funciones poderosas.

 

Curry de escritura a mano:

function curry(func) {
    return function curriedFn(...args) {
        // 判断实参和形参的个数
        if (args.length < func.length) {
            return function () {
                return curriedFn(...args.concat(Array.from(arguments)))
            }
        }
        return func(...args)
    }
}
function getSum(a, b, c) {
    return a + b + c
}
const curried = curry(getSum)
console.log(curried(1, 2, 3))
console.log(curried(1)(2)(3))

 

Supongo que te gusta

Origin blog.csdn.net/qq_40289624/article/details/108685586
Recomendado
Clasificación