28. IO函子
leezozz 1/27/2023 js
# IO函子 input、output
到目前为止对函子的认识:可以把函子当成一个盒子,盒子里保存一个值,通过调用函数的map方法传入一个函数,通过这个函数对这个盒子的值进行处理。
- IO函子中的value是一个函数,这里是把函数作为值来处理
- IO函子可以把不纯的动作存储到_value中,延迟执行这个不纯的操作(惰性执行),包装当前的操作纯
- 把不纯的操作交给调用者来执行
const fp = require('lodash/fp')
class IO {
static of(value) {
return new IO(function() {
return value
})
}
constructor(fn) {
this._value = fn
}
map(fn) {
return new IO(fp.flowRight(fn, this._value))
}
}
// 输出当前执行node进程的路径
let r = IO.of(process).map(val => val.execPath)
console.log('r', r)
console.log('r ---', r._value())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21