Functor en TypeScript
¿Cómo puedo crear un functor en TypeScript?
EDITAR :
Functor es, en el mundo de C++, una función que puede mantener estado - básicamente una clase que ha sobrescrito el operador ().
Entonces, por ejemplo, soy capaz de hacer lo siguiente:
class myClass {
var value : string;
// how?
functor() : string {
return value;
}
}
var a = new myClass();
a.value = "abc";
a(); // to return "abc"
Respuesta #1
Así que realmente lo que tienes aquí es un método en una clase, así:
class myClass {
constructor(private text: string) {
}
methodName() : string {
return this.text;
}
}
var a = new myClass('Example');
a.methodName(); // 'Example'
Si solo quieres una función simple, también puedes hacer eso:
function functor(text : string) : string {
return "abc";
}
functor('text');
Diferencia Entre Función Estilo JS y Salida de Clase
Puedes intentar reproducir un functor, así:
function functor(text : string) : () => string {
return function() {
return text;
}
}
var x = functor('Example');
x(); // returns 'Example'
Pero en realidad, usar una clase te da algo muy similar:
var myClass = (function () {
function myClass(text) {
this.text = text;
}
myClass.prototype.methodName = function () {
return this.text;
};
return myClass;
})();
var a = new myClass('Example');
a.methodName(); // 'Example'
Con los beneficios de la semántica de clases... puedes extender la clase, puedes generar una interfaz a partir de la clase y así sucesivamente.
Respuesta #2
TypeScript/JavaScript no funciona de esa manera, pero puedes obtener algo parecido.
function makeFunctor(privateText: string) {
return function (text: string): string {
return privateText + text;
};
}
var a = makeFunctor('abc');
var b = a('def');
// Logs "abcdef"
console.log(b);
