zoukankan      html  css  js  c++  java
  • 柯里化函数组合的学习

    2020-09-19
    柯里化函数组合的学习
    • 需要将传入的 NEVER SAY DIE => 转化为 never-say-die
    • 有很多种方法 这里使用 先split 再 小写 再join的方式
    说明:
    • trace是追踪函数
    思路:
    • 柯里化的确是有点绕 他的目的是将多参数转为单参数依次传入
    • 而lodash中的flow函数只支持单参数
    • 所以我们可以将需要用到的函数柯里化处理 预先传入一个确定的参数
    • 等flow函数处理得到结果后 第二个参数传入 就会执行柯里化改造后的函数了
    // NEVER SAY DIE => never-say-die
    
    const _ = require('lodash');
    
    // join函数改写 柯里化的join 在组合中 可以事先传入使用哪种方式组合
    const join = _.curry((sep, arr) => arr.join(sep));
    
    // split函数改写 柯里化的split 在组合中 可以事先传入使用哪种方式分割 
    const split = _.curry((sep, str) => str.split(sep));
    
    // 柯里化的日志函数 可以在调用的时候传入特殊的符号标记当前处于哪一步
    // tag是写入的标记符号
    // v是上一个函数返回的值 在打印完后直接传给下一个函数
    const trace = _.curry((tag, v) => {
      console.log(tag, v);
      return v;
    })
    
    // map改写
    // 柯里化 匿名函数 第一个参是fn 第二个是要处理的数组
    const map = _.curry((fn, arr) => _.map(arr, fn));
    
    // const handler = _.flowRight(join('-'), split(' '), log, _.toLower);
    const handler = _.flowRight(join('-'), trace('map 之后'), map(_.toLower), trace('split 之后'), split(' '));
    // 步骤分析
    // 1: handle调用传入的字符串 经过 类型为 ' ' 分割 
    // 2: 打印 标记为 split 之后 的经过split分割后的结果
    // 3:将结果传给map map中是将数组的每一项变成小写 并返回处理后的结果
    // 4: 同2
    // 5: 将都变成小写的结果数组 传入join 以 '-' 拼接 并将结果返回
    
    let a = handler('NEVER SAY DIE');
    console.log(a);

    打印结果

    感觉今天以前我都看不懂上面的代码 

    今天经验值 +10!

  • 相关阅读:
    Python2 升级Python3
    'builtin_function_or_method' object has no attribute 'translate'
    antd-mobile的DatePicker分钟精度半小时
    Windows10远程报错:由于CredSSP加密Oracle修正
    Nginx配置
    MySQL之索引优化
    Ubuntu下删除VMware的方法
    控制窗体的显示和隐藏
    os模块
    树莓派 使用3.5耳机口输出音频
  • 原文地址:https://www.cnblogs.com/lanpang9661/p/13698007.html
Copyright © 2011-2022 走看看