不明白scalaz endo的功能
发布时间:2020-12-16 18:35:21 所属栏目:安全 来源:网络整理
导读:在 scalaz中,Function1Ops中的endo函数以这种方式实现: def endo(implicit ev: R =:= T): Endo[T] = Endo.endo(t = ev(self(t))) 我很好奇为什么在Endo.endo函数的主体中,而不仅仅是简单地将自我…作为Endo.endo(self),其行为与Endo.endo相同(t = ev(self(t
在
scalaz中,Function1Ops中的endo函数以这种方式实现:
def endo(implicit ev: R =:= T): Endo[T] = Endo.endo(t => ev(self(t))) 我很好奇为什么在Endo.endo函数的主体中,而不仅仅是简单地将自我…作为Endo.endo(self),其行为与Endo.endo相同(t => ev(self(t)) ). 这是我的模仿实现,我发现两者没有区别.我错过了什么? def endo[R,T](f: R => T)(implicit ev: T =:= R) = (x: R)=> ev(f(x)) def endo2[R,T](f: R => T)(implicit ev: T =:= R) = f 此外,第一个实现是否在运行时增加了一些开销? 解决方法
Endo.endo功能需要A => A.自我值是函数T => R不符合远藤要求.
你理论上可以把T => R至T =>但是创建了ev参数,所以你不需要投射并且不小心犯了T =>的错误. R不等于T => T. 然而他们可以像这样写: def endo(implicit ev: R =:= T): Endo[T] = Endo.endo(self andThen ev) 您的示例编译因为未设置返回类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |