在ActionScript我可以通過任意參數列表功能:haXe的:傳遞的任意函數參數列表
函數foo(參數... args):無效{跟蹤(args.length); }
Haxe有什麼能力做出類似的東西嗎?我想用未知類型和數量的參數調用函數。
在ActionScript我可以調用函數傳遞數組作爲任意參數:
foo.apply(此,argsArray);
Haxe有可能嗎?
在ActionScript我可以通過任意參數列表功能:haXe的:傳遞的任意函數參數列表
函數foo(參數... args):無效{跟蹤(args.length); }
Haxe有什麼能力做出類似的東西嗎?我想用未知類型和數量的參數調用函數。
在ActionScript我可以調用函數傳遞數組作爲任意參數:
foo.apply(此,argsArray);
Haxe有可能嗎?
來自Haxe文檔,您可以使用Rest參數。
「如果宏的最後一個參數是陣列類型,宏接受的額外的參數,其可從該陣列
import haxe.macro.Expr;
class Main {
static public function main() {
myMacro("foo", a, b, c);
}
macro static function
myMacro(e1:Expr, extra:Array<Expr>) {
for (e in extra) {
trace(e);
}
return macro null;
}
}
的任意數量的」
你可以打電話Reflect.callMethod - http://api.haxe.org/Reflect.html#callMethod
用法示例:
class Test {
static function main() {
var console = js.Browser.window.console;
var fn = console.log;
Reflect.callMethod(console,fn,[1,2,"three",[4]]);
}
}
如果您正在調用可以接受任意數量參數的現有方法(在本機環境或外部環境中),則這是正確答案。 – 2015-02-07 23:03:11
感謝您的好評。 :d – zehelvion 2017-05-27 07:11:52
我想補充這一點,如果你描述一個外部對外部JavaScript庫(或Python,Lua中,或支持其餘參數任何目標語言,例如...rest
),有一個特定的Haxe類型,haxe.extern.Rest,來表達這一點。
這裏的顯示錶明,JavaScript Math.max
函數處理可變參數的例子:http://try.haxe.org/#4607C
class Test {
static function main() {
trace("JS Math.max takes varargs:");
trace(MyMath.max(1,2,3,4)); // 4
trace(MyMath.max(5,6)); // 6
}
}
@:native("Math")
extern class MyMath {
static function max(a:Float,
b:Float,
rest:haxe.extern.Rest<Float>):Float;
}
注意,HAXE標準庫確實不定義Math.max
與休息,因爲它的目標是跨平臺的兼容性。
這是正確的答案,如果你想編寫自己的方法,需要任意數量的參數。並不是每個Haxe編譯器目標都支持「Rest」參數,但是您可以在編譯時使用宏來模擬它。 – 2015-02-07 23:04:52