我如何使用特征scala.Proxy

时间:2010-10-10 15:07:37

标签: scala dynamic proxy scala-2.8

我刚发现它in the API,希望看到一两个例子以及解释它的好处。

2 个答案:

答案 0 :(得分:14)

代理特征为创建代理提供了有用的基础,但请注意,它仅提供AnyequalshashCodetoString中方法的实现。 。您必须自己实施任何其他转发方法。代理通常与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-incubator中有一个编译器插件(AutoProxy plugin)将自动实现转发方法。另请参阅this question

答案 1 :(得分:3)

当你需要Haskell的newtype功能时,看起来你会使用它。

例如,以下Haskell代码:

newtype Natural = MakeNatural Integer
                  deriving (Eq, Show)

可能大致对应于以下Scala代码:

case class Natural(value: Int) extends Proxy {
  def self = value
}