我刚刚找到它in the API,并希望看到一个或两个示例以及说明它的优点。

最佳答案

代理特征为创建委托(delegate)提供了有用的基础,但是请注意,它仅提供Any(equalshashCodetoString)中方法的实现。您将必须自己实现任何其他转发方法。代理通常与pimp-my-library pattern一起使用:

class RichFoo(val self: Foo) extends Proxy {
   def newMethod = "do something cool"
}

object RichFoo {
   def apply(foo: Foo) = new RichFoo(foo)
   implicit def foo2richFoo(foo: Foo): RichFoo = RichFoo(foo)
   implicit def richFoo2foo(richFoo: RichFoo): Foo = richFoo.self
}

标准库还包含一组特征,这些特征对于创建集合代理(SeqProxySetProxyMapProxy等)很有用。

最后,在scala孵化器中有一个编译器插件(AutoProxy plugin),它将自动实现转发方法。另请参见this question

10-06 00:51