Στη γραφομηχανή πώς μπορώ να κηρύξει μια σειρά από λειτουργίες που δέχονται μια σειρά και να επιστρέψει ένα string;

ψήφοι
19

ΕΝΗΜΕΡΩΣΗ - το πλαίσιο της παρούσας ερώτημα ήταν προ-γραφομηχανή 1.4. Από εκείνη την έκδοση, η πρώτη μου εικασία έχει υποστηριχθεί από τη γλώσσα. Δείτε την ενημέρωση για την απάντηση.


Μπορώ να δηλώσω fότι είναι μια λειτουργία που δέχεται μια σειρά και επιστρέφει ένα string:

var f : (string) => string

Και μπορώ να δηλώσω gότι είναι μια σειρά από κλωστή:

var g : string[]

Πώς μπορώ να δηλώσει hότι είναι μια σειρά από «λειτουργία που δέχεται μια σειρά και επιστρέφει ένα string»;

Η πρώτη μου εικασία:

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

Αυτό φαίνεται να είναι ένα συντακτικό λάθος. Αν έχω πάρει τις επιπλέον παρενθέσεις τότε είναι μια συνάρτηση από το κορδόνι για να σειρά χορδών.

Δημοσιεύθηκε 03/10/2012 στις 11:01
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
38

Το βρήκα. Το πρόβλημα είναι ότι το =>ένα είδος λειτουργία γραμματική είναι το ίδιο απλή συντακτική ζάχαρη και δεν θέλει να συνθέσει με [].

Καθώς το spec λέει:

Ένας τύπος λειτουργία γραμματική της μορφής

(ParamList) => ReturnType

είναι ακριβώς ισοδύναμο με το είδος αντικειμένου κυριολεκτική

{(ParamList): ReturnType}

Έτσι, αυτό που θέλω είναι:

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

Πλήρης παράδειγμα:

var f : (string) => string

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

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

h = [];

h.push(f);

Ενημέρωση :

Κρίνοντας από αυτό το changeset παρενθέσεις θα επιτρέπεται στις δηλώσεις τύπου 1.4, έτσι ώστε η «πρώτη εικασία» στην ερώτηση θα είναι επίσης σωστό:

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

Περαιτέρω Ενημέρωση Είναι το 1.4!

Απαντήθηκε 03/10/2012 στις 12:00
πηγή χρήστη

ψήφοι
0

Με βάση την έρευνα σας έγραψα μια μικρή κατηγορία 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();
Απαντήθηκε 31/03/2014 στις 10:19
πηγή χρήστη

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