以下example from 斯卡拉之旅顯示了基於類型如何使用隱式提供適當的缺失成員(add和unit)。編譯器將在範圍內選擇正確的隱式對象。該庫也使用List.sortBy
和Ordering
或List.sum
和Numeric
。隱式參數的有效用法
然而是在B類以下使用隱式參數的一個有效/推薦的使用(相對於不使用A類隱含的):
class I
class A {
def foo(i:I) { bar(i) }
def bar(i:I) { baz(i) }
def baz(i:I) { println("A baz " + i) }
}
(new A).foo(new I)
class B {
def foo(implicit i:I) { bar }
def bar(implicit i:I) { baz }
def baz(implicit i:I) { println("B baz " + i) }
}
(new B).foo(new I)
在哪裏我主要使用隱式對自己保存一些打字在調用站點上傳遞參數時。
雖然根據語言規則有效,但我個人不會在這些情況下使用暗示。我會用它們: 1)根據調用環境改變方法的行爲。 2)對調用取決於周圍類的類型參數或方法本身。 但是,這只是我個人的看法,何時以及如何使用它們。也許還有其他有效和有用的模式。 – axel22 2010-11-10 16:36:20