¿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