Búsqueda de sitios web

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);

Artículos relacionados