javascript - thunk 和函数柯里化(Currying)相同吗?

标签 javascript currying thunk

当我学习 thunk 时,我认为它们就像函数柯里化(Currying)。为什么叫thunk?

重击

function add(x, y){
  return x + y
}

function thunk() {
  return add(10, 20)
} 

函数柯里化(Currying)

function multiply(a, b, c) {
    return a * b * c;
}

function multiply(a) {
    return (b) => {
        return (c) => {
            return a * b * c
        }
    }
}

最佳答案

不,它们完全不同。

但是,thunkcurrying函数式编程中都有应用。

谢谢

Thunk 是一种用于延迟计算的函数式编程技术。

这在 redux 环境中对我们有很大帮助。

那么,当我们调度一个 Action 时想要延迟计算时,我们该怎么办? 我们使用 thunks 作为中间件。

很简单

export default function thunkMiddleware({ dispatch, getState }) {
  return next => action =>
    typeof action === 'function' ?
      action(dispatch, getState) :
      next(action);
} 

这主要是 redux-thunkthunk 的实现。

它基本上只是检查 dispatched 操作是否是一个函数,如果不是,它就按原样传递它。

您可以阅读核心实现here 。只有 14 行。

柯里化(Currying)

柯里化(Currying)是将一个有 n 个参数的函数转换为 n 个函数,每个函数只有一个参数。

例如,如果我们有一个带有三个参数 a、b 和 c 的函数

let result = fn(a,b,c)

当我们对其应用柯里化(Currying)时,它就变成了

let applyCurrying = curriedFn(fn);
let result = applyCurrying(a)(b)(c);

curredFn 的简单实现:

const curriedFn = a => b => c => ( do compuation with a,b,c );

在柯里化(Currying)中,每个函数只接受一个参数。

关于javascript - thunk 和函数柯里化(Currying)相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61584833/

相关文章:

javascript - 'Object.assign' 在更深层次上改变状态

javascript - 创建一个 HTMLCollection

javascript - Promise 中的 JS Promise

c++ - 返工 for 循环 STL 容器以使用功能技术

python - 柯里化(Currying) lambda 表达式如何工作?

sml - 在 SML 中是否有多种编写 thunk 的方法?

c++ - x64 的简单 Windows 回调 thunk

javascript - 当网页将要关闭时,浏览器会做什么?

python - 使用 python with-statement 柯里化(Currying)?

mysql - 从 Node 、mysql、koa中的thunk获取数据