Closed JuanFdS closed 3 years ago
Ahí pusheé varios de los cambios, esto solo no lo corregí porque no estaba seguro que era lo mejor a hacer en ese caso 🤔 https://github.com/uqbar-project/function-laboratory/pull/47#discussion_r611121999
Si te convence como esta ahora mergealo nomas :D
@PalumboN ah me falto pingearte (? ^
@JuanFdS mergié! :clap: :clap: :clap:
(El test que comentamos lo podemos ver más adelante, no creo que influya mucho).
Sugerencia para le reviewer
Es un refactor un poco violento con varios cambios, creo que aunque son muchos commits esta mas facil revisar por commit para entender como fue el camino del refactor porque la mayoría son pasos chiquitos y atomicos.
Qué
El objetivo del PR es simplificar la firma de los bloques que creamos para que en vez de pasarle una funcion que tenga que encargarse de ir a buscar bloques y crear un bloque nuevo le pasemos una que solo necesite conocer que parametros espera la funcion representada por el bloque y que valor debe devolver.
Ademas, se tuneó un poco como se reducen los bloques para permitir reducir bloques mas complejos aplicados parcialmente:
Como
Ahora al crear un bloque hay que pasar un parametro
evaluation
en vez degetResultBlock
.Lo principal de este PR es que ahora no se necesita obtener un bloque reducido como paso intermedio como antes, si no que ahora el codigo se basa en que a un bloque se le puede pedir
getValue()
que devuelve un valor en javascript que representa el valor actual del bloque. Y además, esegetValue()
puede retornar una funcion, entonces cuando un bloque esta parcialmente aplicado devuelve la funcion parcialmente aplicada correspondiente.Aplicando Parcialmente
Para poder implementar esto creé un archivo separado:
partialApply.js
, que proveepartialApply
que recibe una lista de argumentos y una funcion y le aplica esos argumentos a la funcion. El truco que tiene es que si se pasa___
(un objeto definido en ese archivo) como parametro, se obtiene una funcion que espera por ese parametro. Por ej:devuelve una funcion que espera un numero y cuando lo reciba va a devolver ese numero - 5.
Esto solo funciona con funciones que esperan recibir de a un parametro a la vez y que estan currificadas, así que las funciones que le pasemos a los bloques van a tener que cumplir eso.