因为IO函数需要用到组合函数,所以需要提前安装Lodash
- IO就是输入输出,IO 函子中的 _value 是一个函数,这里是把函数作为值来处理
- IO 函子可以把不纯的动作存储到 _value 中,延迟执行这个不纯的操作(惰性执行),包装当前的操作
- 把不纯的操作交给调用者来处理 ```javascript const fp = require(‘lodash/fp’)
class IO { // of方法快速创建IO,要一个值返回一个函数,将来需要值的时候再调用函数 static of(value) { return new IO(() => value) } // 传入的是一个函数 constructor (fn) { this._value = fn }
map(fn) { // 这里用的是new一个新的构造函数,是为了把当前_value的函数和map传入的fn进行组合成新的函数 return new IO(fp.flowRight(fn, this._value)) } }
// test // node执行环境可以传一个process对象(进程) // 调用of的时候把当前取值的过程包装到函数里面,再在需要的时候再获取process const r = IO.of(process) // map需要传入一个函数,函数需要接收一个参数,这个参数就是of中传递的参数process // 返回一下process中的execPath属性即当前node进程的执行路径 .map(p => p.execPath) console.log(r) // IO { _value: [Function] }
// 上面只是组合函数,如果需要调用就执行下面 console.log(r._value()) // C:\Program Files\nodejs\node.exe ```