AS 函数重载
C++里有很多好用的特性,比如函数重载:
函数重载:同一个函数名,根据不同的参数列表来调用不同的函数。
不同的参数列表:不同是参数个数,不同的参数类型,或者参数类型顺序不同。 跟函数返回类型没关系。
当然函数重载也包括构造函数重载。
有关更详细的函数重载请看这里。
至于AS的函数重载请看下面。
AS并没有像C++一样提供语言级的支持,但是AS里有个关键字... (rest)
... (rest) 指定函数将接受任意数目的用逗号分隔的参数。
OK,有了它,我们可以模拟函数重载。
我们自己先规定好,可接受的参数列表,然后去做相应的处理。
- 好处:使用者只需使用一个函数名即可实现不同的功能,当然这些功能应该都是相近的
- 坏处:没有了编译时错误,使因手写出错的几率增加
如果上面的没怎么明白,请看下面的代码,看了之后相信你就会明白,然后说:“哦,原来是这样啊,AS真的很强大! :lol: ”
package
{
import flash.display.Sprite;
/**
* www.litefeel.com
* @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
» 转载请注明来源:www.litefeel.com » 《AS 函数重载》
» 本文链接地址:https://www.litefeel.com/function-overloading-for-as3/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
» 本文链接地址:https://www.litefeel.com/function-overloading-for-as3/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
@Jing
switch 也Ok的, switch嵌套也不好看的,O(∩_∩)O~ :razz:
建议使用switch