以下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