我在一本书中读过,点击函数(也称为K-Combinator)的函数签名如下:
tap :: (a -> *) -> a -> a
“这个函数接受一个输入对象 a 和一个对 a 执行某些操作的函数。它使用提供的对象运行给定的函数,然后返回该对象。”
- 有人可以帮我解释函数签名中星号(*)的含义吗?
- 下面的实现是否正确?
- 如果这三种实现都正确,那么什么时候应该使用哪一种?有什么例子吗?
实施1:
const tap = fn => a => { fn(a); return a; };
tap((it) => console.log(it))(10); //10
实施2:
const tap = a => fn => { fn(a); return a; };
tap(10)((it) => console.log(it)); //10
实施3:
const tap = (a, fn) => {fn(a); return a; };
tap(10, (it) => console.log(it)); //10