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>) { ... });
fonte
2012-12-25 00:40:40
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
@ 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? –