为什么AS3的地图回调需要另外两个参数?

时间:2015-05-01 06:35:54

标签: function actionscript-3 functional-programming

说我有:

myArray = [1,2,3];

并说我在其他地方有一个util函数:

add3 = function(val) {
   return val+3;
}

现在,如果我想将它用作地图功能的回调,我必须做这样的事情:

add3Callback = function(currentValue, index, array) {
    return add3(currentValue);
}

myArray.map(add3Callback);

尝试myArray.map(add3)会导致“参数计数错误匹配”。最好是地图回调不需要额外的两个参数,因为现在我必须为所有我的util函数添加包装器以便将它们与map一起使用,这违背了在第一个中使用map的一些原因的地方。

我在这里缺少什么?为什么这些论点必须是强制性的,其他语言(包括Javascript)似乎不会这样做。

2 个答案:

答案 0 :(得分:0)

因为它的方式就是这样。

如果你想解决这个问题,那就写下这样做的功能吧。为什么要为每个要传递给Array.map()的函数编写特定的包装函数?

function map(array:Array, callback:Function):void
{
   array.map(function(currentValue, index, array):void { callback(currentValue);});
}

抱怨将函数调用相互包装并声称Javascript不同是必要的,因为在js中,出于范围原因,你总是在其他函数调用中包装东西,除了这种情况。

答案 1 :(得分:0)

因为AS3比JS更严格。具体来说,您不能使用不正确的参数调用函数。例如:

function f(a){}
f(1,2,3); // JS allows this, AS3 does not

This article可以帮助您理解AS3背后的设计选择(BTW,基于ES4,如果"political reasons"没有放弃,它将成为JS):