柯里化函数组合的学习

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!

原文地址:https://www.cnblogs.com/lanpang9661/p/13698007.html