高阶函数是否有一个标准名称,它接受一个带有多个参数的函数,并返回一个带有一个元组参数的函数:

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不重要的情况下,第一个参数往往会使函数调用变得混乱,因此您可能会传递一个类似nullundefined的值,但在某些边缘情况下,它可能非常有用。
在只想指定数组的情况下,可以实现与示例等效的包装函数,如下所示:
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'])

10-02 03:29