根據樣式指南 - 是否存在一個經驗法則?Scala中的類別類型應該使用什麼規則?context bound
或implicit ev
表示法?是否在Scala中使用上下文綁定或隱式ev
這兩個例子做結合的相同
上下文具有更簡潔函數簽名,但需要val
評價與implicitly
呼叫:
def empty[T: Monoid, M[_] : Monad]: M[T] = {
val M = implicitly[Monad[M]]
val T = implicitly[Monoid[T]]
M.point(T.zero)
}
的implicit ev
方法自動插入類型類成函數參數,但污染方法簽名:
def empty[T, M[_]](implicit T: Monoid[T], M: Monad[M]): M[T] = {
M.point(T.zero)
}
大部分的圖書館我che cked(例如"com.typesafe.play" %% "play-json" % "2.6.2"
)使用implicit ev
你在使用,爲什麼?
我完全同意,但我想補充一個小精度:隱式搜索是通過執行編譯器在編譯時,所以絕對沒有運行時性能的影響。結論:這實際上就像你說「基於意見」一樣。 –
沒有運行時性能影響,但編譯時性能在scala代碼庫中有點問題,所以我總是傾向於留意它;)也可能有一點運行時間的開銷,因爲你正在做一個額外的方法調用(隱含''),但是JVM可能會嵌入那個 –
謝謝!用'apply'方法真的很好,檢查了文章。雖然沒有在'scalaz'中找到,但是 –