zoukankan      html  css  js  c++  java
  • reduce要素与适用总结

    要素:

    1、高阶函数:reduce;

    2、处理函数:reducer;

    3、数据:可以是具体数据、签名相同的普通函数、签名相同的高阶函数;

    reduce(reducer, datas(data or funciton), initResult(optional))

    一、平凡数据处理

    1 In [5]: reduce(add, [1,2,3,4,5])   

    2 Out[5]: 15 

    1 In [6]: reduce(add, [1,2,3,4,5], 10)   

    2 Out[6]: 25 

    二、函数组作为数据、计算串联、函数输入与返回单一类型兼容;缩减结果为普通数值;

    reducer:(result, fn) => fn(result)

    function compose(...funcs) {

      return result => [...funcs]

        .reverse()

        .reduce((result, fn) => fn(result), result);

    }

    三、函数组作为数据、计算串联组合,缩减的结果任然是一个函数;函数组签名一致,且输出与输入匹配;

    funcs.reduce((a, b) => (...args) => a(b(...args)))

    function compose(...funcs) {

      return funcs

        .reverse()

        .reduce((fn1, fn2) => (...args) => fn2(fn1(...args)));

    }

    四、高阶函数组合,后面的函数作为前一高阶函数的参量输入,通过柯里化函数的局部赋值使函数组函数满足要求(next);

    ({ getState, dispatch }) => next => action

    给({ getState, dispatch }) => next => action签名的函数组分步赋值并进行串联的过程;

    整体上是dispatch的method swizzling;

    export default function applyMiddleware(...middlewares) {

      return (next)  =>

         (reducer, initialState) => {

            var store = next(reducer, initialState);

            var dispatch = store.dispatch;

            var chain = [];

    //构造初值

            var middlewareAPI = {

              getState: store.getState,

              dispatch: (action) => dispatch(action)

            };

    //给柯里化函数赋初值:next => action

            chain = middlewares.map(middleware => middleware(middlewareAPI));

    //next

            dispatch = compose(...chain, store.dispatch);

            return {

              ...store,

              dispatch

            };

       };

    }

  • 相关阅读:
    (二)处理视频
    vim下多行注释与解注释
    (一)读取显示图片
    解决死锁的方法
    死锁、活锁和饿死的理解(转)
    C# winfrom 窗体的StartPosition 属性
    Show()和ShowDialog()
    WinForm应用程序之注册模块的设计与实现
    Epplus使用教程1(基本介绍)
    C#中操作txt,抛出“正由另一进程使用,因此该进程无法访问此文件”
  • 原文地址:https://www.cnblogs.com/feng9exe/p/11176169.html
Copyright © 2011-2022 走看看