2012-12-24 16 views
11

Nel linguaggio di programmazione Haxe, è possibile passare una funzione come parametro (come in JavaScript?)Passaggio di una funzione come parametro in Haxe

Ad esempio, è il seguente codice considerato valido Haxe?

function a(){ 
    trace("This function is being used as a parameter!"); 
} 

function b(theFunction){ 
    theFunction(); 
} 

b(a); //is this equivalent to a(); ? 
+0

Non so su haxe: ma in 'b (a)' si sostituito il nome di una funzione con la sua definizione. Questi sono quasi sempre gli stessi. Dico quasi sempre perché se haxe cerca di fare qualcosa di divertente per l'argomento della funzione (diciamo che 'a' aveva un parametro e, dopo averlo passato come argomento, la semantica di haxe ha forzato l'argomento ad essere ridotto ad una forma normale ... tu può finire con una non terminazione. Al momento non riesco a pensare a nessuna differenza – user1666959

+0

@ user1666959 Non tutte le lingue consentono il passaggio di funzioni come argomenti - Java, ad esempio, non consente il passaggio delle funzioni come argomenti. in Haxe, o non è possibile? –

risposta

12

E 'sicuramente possibile, ed è un modello utilizzato nella libreria standard, in particolare nella classe Lambda:

class Test { 
    static function main(){ 
    var arr = [0,1,2,3,4,5,6,7,8,9,10]; 
    var newArr = Lambda.filter(arr, function (num) { 
     return num % 2 == 0; 
    }); 
    for (i in newArr) 
    { 
     trace (i); 
    } 
    } 
} 

(Vedi http://try.haxe.org/#C9dF3)

Per definire i propri metodi che accettano funzioni come parametri si utilizza la (param1Type)->(param2Type)->(returnType) sintassi:

function test1(myFn:String->Void) { myFn("hi"); } 
test1(function (str) { trace(str); }); 

function test2(myFn:String->String) { var newStr = myFn("hi"); } 
test2(function (str) { return str.toUpperCase(); }); 

function test3(myFn:Int->String->Array<Int>->Void) { myFn(3, "Jason", [1,2,3,4]); } 
test3(function(num:Int, name:String, items:Array<Int>) { ... }); 
9

vedere e provare per lei prega :)

http://try.haxe.org/#CFBb3

+0

Grazie - Ho dimenticato che era possibile testare il codice Haxe online :) –

+0

L'altro modo veramente veloce per testare le cose è compilare a neko ... basta usare "haxe -x MyTestClass.hx "e genererà" MyTestClass.hx.n "e lo eseguirà per tutti in una volta. Davvero utile per controllare rapidamente come funziona qualcosa in Haxe. –

Problemi correlati