是否有一个高阶函数的标准名称,它接受一个带有多个参数的函数并返回一个带有单个元组参数的函数:
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
答案 0 :(得分:1)
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'])