Estaba trabajando en algún código el día de hoy, cuando me di cuenta, "¡Oye! Este código sería más conciso y semántico si abstraía la idea de un booleano no de un función anónima y en una función prototipo ..."JavaScript funcional: cómo implementar Function.prototype.not
Considere un generador de predicado:
function equalTo(n) {
return function(x) {
return n==x;
};
}
para que puedas usarlo de esta manera:
[1,2,3,4,1,2,3,4].filter(equalTo(2)) == [2,2]
Ahora, mi idea es hacer una predicar te "inverser":
Function.prototype.not = function() {
//???
}
Así que se puede decir:
[1,2,3,4,1,2,3,4].filter(equalTo(2).not) == [1,3,4,1,3,4]
Mi primer intento de la aplicación probablemente era muy ingenua:
Function.prototype.not = function() {
return ! this(arguments);
}
Y, probablemente, por qué no lo hizo trabajo.
¿Cómo implementaría esta función y por qué?
Estoy tratando de entender bien las ideas funcionales, y conocer JavaScript lo suficiente como para saber que se puede usar para hacer esto, pero no cómo.
mientras que apruebe en general de lo que está haciendo, siento que este es un enfoque más orientado a objetos que funcional. El enfoque funcional sería como no (equalTo (2)) para crear un predicado inverso –
@Luke: estoy de acuerdo. Vengo de un fondo muy OO, así que supongo que esto solo representa mi transición de OO a programación funcional ... –
Soy exactamente igual, así que lo entiendo completamente :) En una nota sin relación, asegúrense de ver clojure y coffeescript (de hecho, creo que te encantará coffeescript) –