为什么 AS3 的地图回调需要额外的两个参数?
Why does AS3's map callback require an additional two arguments?
假设我有:
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) 结果是 "argument count mistmatch"。 map 回调不需要额外的两个参数会更好,因为现在我必须向我的所有 util 函数添加包装器才能将它们与 map 一起使用,这与第一个使用 map 的一些原因背道而驰地方。
我在这里错过了什么?为什么这些参数是强制性的有用,其他语言(包括 Javascript)似乎没有这样做。
因为事情就是这样。
如果您想解决这个问题,只需编写执行此操作的函数即可。到底为什么要为要传递给 Array.map() 的每个函数编写一个特定的包装函数?
function map(array:Array, callback:Function):void
{
array.map(function(currentValue, index, array):void { callback(currentValue);});
}
抱怨函数调用相互包装的必要性并声称 Javascript 是不同的,这真的很奇怪,因为在 js 中,出于范围原因,你总是将东西包装在额外的函数调用中,除了这种情况。
因为AS3比JS更严格。具体来说,您不能使用不正确的参数调用函数。示例:
function f(a){}
f(1,2,3); // JS allows this, AS3 does not
This article may help you understand the design choices behind AS3 (which, BTW, was based on ES4 which would have become JS if it wasn't abandoned for "political reasons"):
假设我有:
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) 结果是 "argument count mistmatch"。 map 回调不需要额外的两个参数会更好,因为现在我必须向我的所有 util 函数添加包装器才能将它们与 map 一起使用,这与第一个使用 map 的一些原因背道而驰地方。
我在这里错过了什么?为什么这些参数是强制性的有用,其他语言(包括 Javascript)似乎没有这样做。
因为事情就是这样。
如果您想解决这个问题,只需编写执行此操作的函数即可。到底为什么要为要传递给 Array.map() 的每个函数编写一个特定的包装函数?
function map(array:Array, callback:Function):void
{
array.map(function(currentValue, index, array):void { callback(currentValue);});
}
抱怨函数调用相互包装的必要性并声称 Javascript 是不同的,这真的很奇怪,因为在 js 中,出于范围原因,你总是将东西包装在额外的函数调用中,除了这种情况。
因为AS3比JS更严格。具体来说,您不能使用不正确的参数调用函数。示例:
function f(a){}
f(1,2,3); // JS allows this, AS3 does not
This article may help you understand the design choices behind AS3 (which, BTW, was based on ES4 which would have become JS if it wasn't abandoned for "political reasons"):