AS 函数重载
C++ 里有很多好用的特性,比如函数重载:
函数重载:同一个函数名,根据不同的参数列表来调用不同的函数。
不同的参数列表:不同是参数个数,不同的参数类型,或者参数类型顺序不同。 跟函数返回类型没关系。
当然函数重载也包括构造函数重载。
有关更详细的函数重载请看这里。
至于AS的函数重载请看下面。 ![]()
AS并没有像C++一样提供语言级的支持,但是AS里有个关键字 ... (rest)
... (rest) 指定函数将接受任意数目的用逗号分隔的参数。
OK,有了它,我们可以模拟函数重载。
我们自己先规定好,可接受的参数列表,然后去做相应的处理。
- 好处:使用者只需使用一个函数名即可实现不同的功能,当然这些功能应该都是相近的
- 坏处:没有了编译时错误,使因手写出错的几率增加
如果上面的没怎么明白,请看下面的代码,看了之后相信你就会明白,然后说:“哦,原来是这样啊,AS真的很强大!
”
package { import flash.display.Sprite; /** * www.lite3.cn * <a herf="http://www.lite3.cn">www.lite3.cn</a> * @author lite3 */ public class Test extends Sprite { public function Test() { var sumer:Sumer = new Sumer(); // 添加一个数字 sumer.add(1); // 添加一个字符串类型的数字 sumer.add("1"); // 添加一个数字列表 sumer.add([1, 2, 3]); // 添加两个数值之间的所有数字 sumer.add(1, 5); // 添加一个错误的参数列表 //sumer.add(1, 2, 3); } } } class Sumer { /** * 增加数值 * * ------------------------------------ * 增加一个数字 * function addNumber(num:Number):void; * @param num 要增加的数字 * ------------------------------------ * 增加一个字符串形式的数字 * function addString(num:String):void; * @param num 要增加的数字的字符串 * ------------------------------------ * 增加一个数组里的所有元素 * function addList(list:Array):void; * @param list * ------------------------------------ * 增加两个数值之间的所有数字 * function addAllBetween(beginNum:Number, endNum:Number):void; * @param beginNum 开始数字 * @param endNum 结束数字 */ public function add(... arg):void { // 判断是否没有匹配的参数列表 var hasErr:Boolean = false; // 区别不同的参数个数,只有一个参数 if (1 == arg.length) { // 符合 addNumber 的参数列表 if (arg[0] is Number) { addNumber(arg[0]); } // 符合 addString 的参数列表 else if (arg[0] is String) { addString(arg[0]); } // 符合 addList 的参数列表 else if (arg[0] is Array) { addList(arg[0]); } // 没有符合一个参数的参数列表 else { hasErr = true; } } // 有两个参数 else if (2 == arg.length) { // 符合 addAllBetween的参数列表 if ((arg[0] is Number) && (arg[1] is Number)) { addAllBetween(arg[0], arg[1]); } // 没有符合两个参数的参数列表 else { hasErr = true; } } // 没有符合其他个数的参数列表 else { hasErr = true; } // 纠错 if (hasErr) throw new ArgumentError("参数列表不正确!"); } private function addNumber(num:Number):void { trace("addNumber: num = ", num); } private function addString(num:String):void { trace("addString: num = ", num); } private function addList(list:Array):void { trace("addList: list = ", list); } private function addAllBetween(beginNum:Number, endNum:Number):void { trace("addAllBetween: beginNum = ", beginNum, " endNum = ", endNum); } }
运行结果:
addNumber: num = 1 addString: num = 1 addList: list = 1,2,3 addAllBetween: beginNum = 1 endNum = 5
建议使用switch
@Jing
switch 也Ok的, switch嵌套也不好看的,O(∩_∩)O~