import * as R from 'ramda'
// R.thunkify。用来消除`() => fn`这样的操作
const fnClg = v => console.log(v) // 一个参数时,并且需要传入值v用于调用。
const fnClg2 = (id, v) => console.log(id, v) // 两参数时,不需要调用v,而是调用其他参数的情况。
const fn1 = R.tap(fnClg) // R.tap:返回一个函数,函数执行后返回入参。
const fn2 = R.thunkify(fnClg2)('12313') // R.thunkify:调用完参数后返回待执行函数, 如:fn2 => `v => fn2()`
const fn3 = R.tap(R.curry(fnClg2)('test')) // 跟R.thunkify的区别是,这里是curry,会等待传入一个参数进入才调用。
let clg = R.pipe(
R.tap(r => fnClg(r)), // 调用结果但不改变结果,返回结果给下面的函数。这里是打印结果r
R.tap(fn1), // 优化上面的写法
R.tap(r => fnClg2('12313', 123)), // 不调用结果,但需要传入一个函数给tap调用。这里不调用结果r,直接让它往下流
R.tap(fn2(123)), // 优化上面的写法
R.tap(fn3) // 第三种写法
)
clg('123')
/*
123
123
12313 123
12313 123
test 123
*/