高阶函数是否有一个标准名称,它接受一个带有多个参数的函数,并返回一个带有一个元组参数的函数:
def what_am_i(f):
def f1(tup):
f(*tup)
return f1
这与大多数编程语言中的
uncurry
不同,我通常将其定义为:def uncurry(f):
def f1(a, b):
return f(a)(b)
return f1
最佳答案
apply()
在javascript中,这称为apply()
:
'use strict'
function test(a, b, c) {
// context
console.log(this)
// arguments
console.log(a)
console.log(b)
console.log(c)
}
// first parameter is the context
test.apply('this', ['a', 'b', 'c'])
不幸的是,在许多
this
不重要的情况下,第一个参数往往会使函数调用变得混乱,因此您可能会传递一个类似null
或undefined
的值,但在某些边缘情况下,它可能非常有用。在只想指定数组的情况下,可以实现与示例等效的包装函数,如下所示:
function test(a, b, c) {
// arguments
console.log(a)
console.log(b)
console.log(c)
}
// what am I? I am `apply()`
function apply(f) {
return function (tup) {
return f.apply(this, tup)
}
}
var applied = apply(test)
applied(['a', 'b', 'c'])
spread()
另一个您可以使用的参数是将其命名为
spread()
,因为spread syntax执行相同的操作:function test(a, b, c) {
console.log(a)
console.log(b)
console.log(c)
}
test(...['a', 'b', 'c'])
您可以实现一个非常直观的包装函数,如下所示:
function test(a, b, c) {
console.log(a)
console.log(b)
console.log(c)
}
// what am I? I am `spread()`
function spread(f) {
return function (tup) {
return f(...tup)
}
}
var spreaded = spread(test)
spreaded(['a', 'b', 'c'])