2012-12-24 15 views
11

W języku programowania haXe, jest to możliwe, aby przekazać funkcję jako parametr (jak w JavaScript?)Przechodząc do funkcji jako parametr w Haxe

Na przykład, następujący kod jest uznawany za ważny w Haxe?

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

function b(theFunction){ 
    theFunction(); 
} 

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

nie wiem o haXe: ale w 'b (a)' ty podstawione nazwę funkcji z jej definicji. Są prawie zawsze takie same. Mówię prawie zawsze, ponieważ jeśli haxe próbuje zrobić coś śmiesznego dla argumentu funkcji (powiedzmy "a" ma parametr i po przekazaniu go jako argumentu semantyka haxe wymusiła sprowadzenie argumentu do jakiejś normalnej formy ... może się wydawać, że nie ma żadnej różnicy – user1666959

+0

@ user1666959 Nie wszystkie języki pozwalają przekazywać funkcje jako argumenty - Java nie pozwala na przykład przekazywać funkcji jako argumentów. w Haxe, czy nie jest to możliwe? –

Odpowiedz

12

Jest to z pewnością możliwe, a to wzór stosowany w bibliotece standardowej, zwłaszcza w klasie 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); 
    } 
    } 
} 

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

Aby zdefiniować własne metody, które mają funkcje Parametry użyć składni (param1Type)->(param2Type)->(returnType):

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

Zobacz i spróbować samemu proszę :)

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

+0

Dzięki - Zapomniałem, że możliwe było przetestowanie kodu Haxe przez Internet. :) –

+0

Innym naprawdę szybkim sposobem testowania rzeczy jest skompilowanie do neko ... po prostu użyj "haxe -x MyTestClass.hx "i wygeneruje" MyTestClass.hx.n "i uruchomi go dla Ciebie wszystkich naraz. Naprawdę przydatny do szybkiego sprawdzania, jak działa coś w Haxe. –

Powiązane problemy