这个功能有名称吗?

时间:2018-03-09 21:10:25

标签: javascript functional-programming ramda.js

我正在寻找以下功能的名称:

(f, a) => () => f(a)

基本上是一个函数,它返回一个函数,当被调用时f调用a

此功能是否有通用名称?也许它可以用一些Ramda魔法来描述?

编辑以澄清:

我正在寻找的与Ramda的部分相似,

partial(f, [a])

除了部分更像:

(f, a) => (b) => f(a, b)

b的{​​{1}}是不受欢迎的。

5 个答案:

答案 0 :(得分:9)

那是thunk

基本上,这是一个可以传递并按需评估的具体计算。人们可能想要延迟对表达式的评估有各种各样的原因(它可能很昂贵,它可能具有时间敏感的副作用等)。

通过const enThunk = f => a => () => f(a);,您可以传递f(a),而无需在以后的某个时间点对其进行实际评估。

答案 1 :(得分:2)

我会用延迟调用来调用它准备好的函数。

第一部分接受函数和参数并返回一个函数,而不用参数调用给定的函数。稍后会通过显式调用函数来调用它。

答案 2 :(得分:1)

我称之为绑定的特殊情况

如果你有两个参数的函数,比如f(x,y),那么你可以定义g(y)= f(5,y)。在这种情况下,您将f中的参数x绑定到固定点5。

答案 3 :(得分:0)

在JavaScript中,这可能被称为绑定。一般来说,这种类型的组合子可能有一个更具体的名称(与应用组合子非常相似 - > f => a => f(a))。

易于实施:

const bind = (f, a) => () => f(a)

答案 4 :(得分:-1)

这是高阶函数

高阶函数是一个函数,它至少将一个或多个函数作为输入或返回另一个函数。

这个定义满足代码:

(f, a) => () => f(a)

因为它本质上是一个返回另一个函数的函数。