如何通过一个方法传递任意一组参数



我使用的是AIR v32.0。我有一个扩展netConnection的类。我需要覆盖一个接收任意一组参数的现有方法。我需要做一些赔率&结束,然后让原始代码处理其余部分。我知道如何接收参数"…parameters",但完成后我找不到调用原始代码的正确方法。

到目前为止,我所拥有的不起作用的是;

public override function call(strCommand:String, rspResponder:Responder,...parameters):void
{
trace("parameters.length=" + parameters.length)
if (parameters.length == 0)
{
super.call(strCommand, rspResponder);
}
else
{
super.call(strCommand, rspResponder, parameters);
}
}

线路;

super.call(strCommand,rspResponder(;

工作符合预期。

线路;

super.call(strCommand,rspResponder,parameters(;

似乎未由"call"方法正确处理。

如何正确地将"…parameters"传递到netConnection类的"super.call"方法?

编辑:

本身没有错误。发生的是,它以web服务没有预料到的格式向FluorineFX web服务发送了一条消息,然后Ralphs就穿上了它的鞋子。错误是";处理级别错误描述找不到名为"LogiCheck"的合适方法;如果我去掉overdden方法,一切都会很好。

当我在Fiddler中查看输出结果时,使用&没有重写的方法。但我无法确定实际的区别是什么

附加编辑:

我有一个非常糟糕的局部工作(至少它有效(,也许这会激发别人的想象力。如果把这个投入生产,我会很尴尬。

public override function call(strCommand:String, rspResponder:Responder,...parameters):void
{
trace("parameters.length=" + parameters.length)
switch (parameters.length)
{
case 0:
super.call(strCommand, rspResponder);
break;
case 1:
super.call(strCommand, rspResponder, parameters[0]);
break;
case 2:
super.call(strCommand, rspResponder, parameters[0], parameters[1]);
break;
case 3:
super.call(strCommand, rspResponder, parameters[0], parameters[1], parameters[2]);
break;
case 4:
super.call(strCommand, rspResponder, parameters[0], parameters[1], parameters[2], parameters[3]);
break;
case 5:
super.call(strCommand, rspResponder, parameters[0], parameters[1], parameters[2], parameters[3], parameters[4]);
break;
case 6:
super.call(strCommand, rspResponder, parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], 
parameters[5]);
break;
case 7:
super.call(strCommand, rspResponder, parameters[0], parameters[1], parameters[2], parameters[3], parameters[4],
parameters[5], parameters[6]);
break;
case 8:
super.call(strCommand, rspResponder, parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], 
parameters[5], parameters[6], parameters[7]);
break;
case 9:
super.call(strCommand, rspResponder, parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], 
parameters[5], parameters[6], parameters[7], parameters[8]);
break;
case 10:
super.call(strCommand, rspResponder, parameters[0], parameters[1], parameters[2], parameters[3], parameters[4], 
parameters[5], parameters[6], parameters[7], parameters[8], parameters[9]);
break;
}
}

要传递额外的。。。arguments的形式为Array,您需要以特殊的Function.apply(…(方式调用该方法。问题是,AS3中的函数(或者通常在ECMA标准中(也是一个对象,因此它有一些自己的属性和方法,在某些情况下,这些属性和方法允许执行一些看起来很奇怪的技巧。

public override function call(strCommand:String, rspResponder:Responder, ...parameters:Array):void
{
trace("parameters.length=" + parameters.length);

// Create a single deflated Array of incoming arguments.
var args:Array = [strCommand, rspResponder].concat(parameters);

// A special way of invoking a function where you provide
// all its arguments in a form of a single Array.
super.call.apply(this, args);
}

记住,我没有测试。此外,我从未尝试过在覆盖上应用(…(,但理论上应该没有问题,我认为?

最新更新