No puedo entender si esta función curry recursiva es correcta o no.
function curry(fn) { return function curryInner(...args) { if (args.length >= fn.length) return fn(...args); return function (...next) { return curryInner(...args, ...next); }; }; } const example = { multiplier: 5, calculate: function (a, b) { return (a + b) * this.multiplier; }, }; example.curriedVersion = curry(example.calculate); console.log(example.calculate(1, 2)); console.log(example.curriedVersion(1)(2));Tengo la función de curry implementada con enlace, pero no estoy seguro de por qué funciona y recursiva no. ¿Me pueden ayudar a entender esto? Creo que mi comprensión del contexto en estas funciones es incorrecta.
function curry(func) { return function curried(...args) { if (args.length >= func.length) { return func.apply(this, args) } else { return curried.bind(this, ...args) } } }Su cálculo es correcto, el problema está en this.multiplier .
Cuando usa la expresión example.calculate sin llamar a la función, no vincula this . Entonces this.multiplier será undefined .
Use example.calculate.bind(example) y su curring funcionará como se esperaba.
function curry(fn) { return function curryInner(...args) { if (args.length >= fn.length) return fn(...args); return function (...next) { return curryInner(...args, ...next); }; }; } const example = { multiplier: 5, calculate: function (a, b) { return (a + b) * this.multiplier; }, }; example.curriedVersion = curry(example.calculate.bind(example)); console.log(example.calculate(1, 2)); console.log(example.curriedVersion(1)(2));