【发布时间】:2011-04-23 11:37:06
【问题描述】:
我刚刚找到它in the API,并希望看到一两个示例以及它的用途说明。
【问题讨论】:
标签: scala dynamic proxy scala-2.8
我刚刚找到它in the API,并希望看到一两个示例以及它的用途说明。
【问题讨论】:
标签: scala dynamic proxy scala-2.8
Proxy trait 为创建委托提供了有用的基础,但请注意,它仅提供 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。
【讨论】:
pimp-my-library 链接现在已损坏。
看起来你会在需要 Haskell 的 newtype 之类的功能时使用它。
例如下面的 Haskell 代码:
newtype Natural = MakeNatural Integer
deriving (Eq, Show)
可能大致对应以下Scala代码:
case class Natural(value: Int) extends Proxy {
def self = value
}
【讨论】: