在scalaz,在Function1Ops
的endo
功能以這種方式實現:不明白scalaz內功能
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
另外,第一個實現不會在運行時增加一些開銷嗎?
我相信,問這類問題的最佳地點是郵件列表:https://groups.google.com/forum/?fromgroups#!forum/scalaz。 #[email protected]也是提出這類問題的好地方。你也可以發送一個pull請求到github repo:https://github.com/scalaz/scalaz。 – folone 2013-03-04 07:41:38