为什么您认为以下代码不起作用? 你会改变/添加什么使它工作?
感谢任何帮助..
function TraceIt(message:String, num:int)
{
trace(message, num);
}
function aa(f:Function, ...args):void
{
bb(f, args);
}
aa(TraceIt, "test", 1);
var func:Function = null;
var argum:Array = null;
function bb(f:Function, ...args):void
{
func = f;
argum = args;
exec();
}
function exec()
{
func.apply(null, argum);
}
我收到ArgumentError(错误#1063):
Argument count mismatch on test_fla::MainTimeline/TraceIt(). Expected 2, got 1.
..所以,传递的参数(argum)无法提供所有传递的参数..
..请保持功能结构(流量)完整。我需要一个使用相同顺序的相同函数的解决方案。我必须将args传递给变量并在上面的exec()方法中使用它们。
问候
答案 0 :(得分:7)
好的,这是解决方案......打破我的头后:)
function TraceIt(message:String, num:int)
{
trace(message, num);
}
function aa(f:Function=null, ...args):void
{
var newArgs:Array = args as Array;
newArgs.unshift(f);
bb.apply(null, newArgs);
}
aa(TraceIt, "test", 1);
var func:Function = null;
var argum:*;
function bb(f:Function=null, ...args):void
{
func = f;
argum = args as Array;
exec();
}
function exec():void
{
if (func == null) { return; }
func.apply(this, argum);
}
这样,您可以将参数作为变量传递给不同的函数并执行它们。
感谢每个人抽出时间帮忙......
答案 1 :(得分:1)
最终调用TraceIt()时,使用1个Array参数调用它,而不是String和int参数。
您可以将TraceIt()更改为:
function TraceIt(args:Array)
{
trace(args[0], args[1]);
}
或者您可以将exec()更改为:
function exec()
{
func.apply(null, argum[0].toString().split(","));
}
...当你通过“test”时出现1,你最终会得到第一个值为“test,1”的数组。但是,这个解决方案并不适用于无关紧要的情况。
答案 2 :(得分:1)
将您的bb功能更改为:
function bb(f:Function, args:Array):void
{
func = f;
argum = args;
exec();
}
如你所知,它接受可变数量的参数,但你从aa传入一个数组(参数)。