柯里化函数组合的学习
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!