¿Cómo es que las palabras2 y las palabras dan el mismo resultado? Sé algo de curry pero no puedo entender este ejemplo a continuación.
function curry(fn) { const arity = fn.length; return function $curry(...args) { if (args.length < arity) { return $curry.bind(null, ...args); } return fn.call(null, ...args); }; } const split = curry((sep, str) => str.split(sep)); const words = split(' '); const words2 = str => split(' ', str) console.log(words('something cool')) console.log(words2('something cool'))Las palabras equivalen a la función split(' '), pero ¿qué sucede cuando vuelvo a llamar a las palabras con una cadena y cómo puede ser igual a la función de palabras2?
Cuando aplica curry a la función de split , es como recuperar dos versiones de la función de división:
function split(sep, str){ str.split(sep); }y
function split(sep) { return function(str) { return str.split(sep); } } y cuál se llama se basa en la cantidad de parámetros proporcionados. Entonces, para el caso de las words , llama a la segunda versión con ' ' y luego llama a la función devuelta con 'something cool' lo que significa que el código real que se ejecuta es:
'something cool'.split(' ') En el otro caso de words2 , llama a la primera versión y se ejecuta el código real:
'something cool'.split(' ')Es por eso que obtienes el mismo resultado.
Porque split(' ', str) y split(' ')(str) dan el mismo resultado
Y llamar a words2 llama al primero mientras que llamar a words llama al segundo