我怀疑是什么叫做转换函数的高阶函数,所以它使用数组而不是参数列表。用文字解释很复杂,所以JavaScript中有一个例子:
sum = function(a,b){ return a+b; };
foo = function(fn){
return function(arr){
return fn.apply(fn,arr);
};
};
different_sum = foo(sum);
log(sum(2,3)); //5
log(different_sum([2,3])); //5
答案 0 :(得分:2)
Scala函数有一个类似的方法,它采用n-ary函数并返回一个以n元组为唯一参数的一元函数。他们调用方法tupled
,您可以在documentation for Function5
(或任何其他大于1的函数arities)中看到它。
答案 1 :(得分:1)
在经典的 Javascript:The Good Parts 中,它被引用为 apply invocation pattern ,这是Javascript中四种调用模式之一。
答案 2 :(得分:1)
似乎没有任何通常使用的术语。
Javascript bind
method包含这样的函数调用,并且没有使用特殊术语。
Prototype bind
method做同样的事情,也没有任何术语。
jQuery proxy
method做同样的事情,也没有任何术语。
术语“包装”用于解释,但这当然是一个更广泛的术语。
答案 3 :(得分:1)
因为您似乎在问“为了便于阅读,我应该将此功能称为什么?” verus“这是什么类型/功能分类?”,我将投入两分钱:
remixInputMethod()
真的,这只是重新布线功能用户与您的程序交互的方式。我想像这样的东西在你希望与它交互的程序中是有用的,方法是输入不同于你希望用户与它交互的方式。
this.sum = function(a,b){ return a+b; };
remixInputMethod = function(fn){
return function(arr){
return fn.apply(fn,arr);
};
};
var _sum = remixInputMethod(this.sum);
// Throughout your program, do some more advanced, funky stuff
var sums = (function buildListOfSums(num){
var arr = [], output = 0;
while(num--){
arr.push(num);
}
while(arr.length > 2){
output += _sum([arr[arr.length - 1], arr[arr.length - 2]]);
arr.pop(arr[arr.length - 1]);
arr.pop(arr[arr.length - 2]);
}
return output;
}(20));
console.log(sums);
// But for the user, lets say, who downloaded your API on Github and is using it to
// build their first webpage for their uncle
// who thinks they are smarter than bill gates
sum(1,2);
答案 4 :(得分:0)
我称之为variadic function。如果你不熟悉,可变参数函数会获取一个参数列表,并允许程序员以数组的形式与它们进行交互。
由于Javascript不支持可变参数函数,fn.apply(context, args)
是实现它的方法。我不认为实际的实施很重要。
Variadic函数以几种不同的语言出现,我的最爱包括:
D网站有一个很好的介绍:http://dlang.org/function.html(搜索可变参数)
修改强>
您的示例与可变参数函数完全相反。它不是采用n个参数并与它们作为数组进行交互,而是采用一组参数并将它们作为单独的参数进行交互。
我仍然认为这与变量函数实际上是相同的,因为它需要可变数量的参数,但它只是改变了与这些参数交互的方式。
可能有一个更好的术语,但也许我们可以称之为inverse variadic function
?