我刚发现它in the API,希望看到一两个例子以及解释它的好处。
答案 0 :(得分:14)
代理特征为创建代理提供了有用的基础,但请注意,它仅提供Any
(equals
,hashCode
和toString
中方法的实现。 。您必须自己实施任何其他转发方法。代理通常与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
}
标准库还包含一组对创建集合代理有用的特征(SeqProxy
,SetProxy
,MapProxy
等。)
最后,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
}