Géppel hogyan állapítsa meg egy sor funkciót, amelyek elfogadják a húr, és visszatér a húr?

szavazat
19

UPDATE - összefüggésben ezt a kérdést előre géppel 1.4. Mivel ez a változat, az első becslés támogatta a nyelvet. Lásd a frissítést a választ.


Kijelenthetem f, hogy egy függvény, amely elfogadja a karakterláncot, és visszaadja a szöveg:

var f : (string) => string

És azt is kijelentik g, hogy egy sor szöveg:

var g : string[]

Hogyan állapítsa meg h, hogy egy sor „funkció, amely elfogad egy karakterláncot, és visszaadja a string”?

Az első becslés:

var h : ((string) => string)[]

Úgy tűnik, hogy a szintaktikai hiba. Ha elveszi az extra zárójelben, akkor ez egy funkciót string tömb string.

A kérdést 03/10/2012 11:01
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
38

Kitaláltam. A probléma az, hogy az =>egy függvény típusa szó maga pusztán szintaktikai cukor, és nem akarja, hogy össze az [].

Mivel a spec szerint:

A funkció típus szó az űrlap

(ParamList) => ReturnType

pontosan ugyanaz az objektum típusát szó

{(ParamList): ReturnType}

Tehát amit én szeretnék:

var h : { (s: string): string; }[]

Komplett példa:

var f : (string) => string

f = x => '(' + x + ')';

var h : { (s: string): string; }[]

h = [];

h.push(f);

frissítés :

Ítélve ez changeset zárójelben megengedett lesz a típusú nyilatkozatok 1.4, így az „első becslés” a szóban forgó is helyes:

var h: ((string) => string)[]

További frissítse Ez az 1.4!

Válaszolt 03/10/2012 12:00
a forrás felhasználó

szavazat
0

Ennek alapján a kutatás írtam egy kis osztály PlanetGreeter / sayHello: `

/* PlanetGreeter */

class PlanetGreeter {
    hello    : { () : void; } [] = [];
    planet_1 : string = "World";
    planet_2 : string = "Mars";
    planet_3 : string = "Venus";
    planet_4 : string = "Uranus";
    planet_5 : string = "Pluto";
    constructor() {
        this.hello.push( () => { this.greet(this.planet_1); } );
        this.hello.push( () => { this.greet(this.planet_2); } );
        this.hello.push( () => { this.greet(this.planet_3); } );
        this.hello.push( () => { this.greet(this.planet_4); } );
        this.hello.push( () => { this.greet(this.planet_5); } );
    } 
    greet(a: string): void { alert("Hello " + a); }
    greetRandomPlanet():void { 
        this.hello [ Math.floor( 5 * Math.random() ) ] (); 
    } 
} 
new PlanetGreeter().greetRandomPlanet();
Válaszolt 31/03/2014 10:19
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more