不少语言里面都有变长参数语法的支持,但方式方法各自不同,比如java是用迭代器,javascript是用arguments变量,AS没研究过,大概跟javascript比较像。
而haXe则是另一种方式,今天工作中恰好要写找最大值最小值的变长参数方法,这里就共享出来。
class Utils {
public static var max: Dynamic;
public static var min: Dynamic;
private static function __init__() : Void {
max = Reflect.makeVarArgs(__max);
min = Reflect.makeVarArgs(__min);
}
private static function __max(args: Array<Dynamic>) : Dynamic {
var m: Dynamic = Math.NEGATIVE_INFINITY;
for (a in args) {
if (a > m) m = a;
}
return m;
}
private static function __min(args: Array<Dynamic>) : Dynamic {
var m: Dynamic = Math.POSITIVE_INFINITY;
for (a in args) {
if (a < m) m = a;
}
return m;
}
}
说明一下:
* 在haXe里面没有arguments这个默认变量,而是需要用Reflect.makeVarArgs()这个函数把一个普通方法转换成变长参数方法
* 因为是静态函数,因此没法在构造函数里做转换,这里写了个__init__()方法,这是haXe里的静态初始化函数,可不是我自己瞎起的名字
* 被转换的方法必须是Array<Dynamic> -> Dynamic类型的
转换完之后的变长参数方法max和min就可以如下语法正常使用了:
trace("max=" + Utils.max(1, 2, 5.2, -1.3, 0, 0.8) + ",min=" + Utils.min(1, 2, 5.2, -1.3, 0, 0.8));