我是 ActionScripting 的新手,但我做过一些 Java。我被告知他们有点相似。我正在用一些集成的 AS3 编码我的 swf 文件。
function init():void{
// do something
}
function init(var string:String):String{
// do something else
}
这在 AS 中是不允许的吗?如果没有,除此之外还有其他处理方法吗?
提前致谢。
我是 ActionScripting 的新手,但我做过一些 Java。我被告知他们有点相似。我正在用一些集成的 AS3 编码我的 swf 文件。
function init():void{
// do something
}
function init(var string:String):String{
// do something else
}
这在 AS 中是不允许的吗?如果没有,除此之外还有其他处理方法吗?
提前致谢。
是的,您可以覆盖函数。但是你给出的例子并不是压倒一切的——它是重载的。对于覆盖函数,您基本上只需创建一个具有相同签名和子类中所有内容的函数,并在它之前添加单词“覆盖”。
但是,您不能直接重载函数。如果您想要可变数量的参数,则必须使用可选参数。像这样:
function init(str:String = null):String
{
if (str == null)
{
// do one thing
return null;
}
else
{
// do another thing
return "someString";
}
}
这就是你在 AS3 中所能做到的最好的。至少严格来说,无法重载函数是一种相当普遍的抱怨和语言的明显缺点。
Actionscript 不支持方法重载。但是,根据对这个问题的回答,您还有其他选择。
如果您只想能够接受任何类型,则可以使用
*
to allow any type:function someFunction( xx:*, yy:*, flag:Boolean = true ) { if (xx is Number) { ...do stuff... } else if (xx is String) { ...do stuff... } else { ...do stuff... } }
如果您有大量顺序不重要的各种参数,请使用选项对象:
function someFunction( options:Object ) { if (options.foo) doFoo(); if (options.bar) doBar(); baz = options.baz || 15; ...etc... }
如果您有可变数量的参数,则可以使用
...
(rest) 参数:function someFunction( ... args) { switch (args.length) { case 2: arr = args[0]; someBool = args[1]; xx = arr[0]; yy = arr[1]; break; case 3: xx = args[0]; yy = args[1]; someBool = args[2]; break; default: throw ...whatever... } ...do more stuff... }
对于需要调用多个类的通用函数的情况,您应该指定每个类的通用接口:
function foo( bar:IBazable, flag:Boolean ) { ...do stuff... baz = bar.baz() ...do more stuff... }
你的意思是方法重载?可悲的是,Actionscript 不支持这一点。
为了解决这个问题,您可以使用默认参数,或者只是让您的参数少一些约束。 这个答案有一些细节。
你可以试试这个:
function init(var string:String = "Default value"):String{
// do something
}