Как использовать черту scala.Proxy - PullRequest
10 голосов
/ 10 октября 2010

Я только что нашел это в API и хотел бы увидеть один или два примера вместе с объяснением, для чего это хорошо.

Ответы [ 2 ]

14 голосов
/ 10 октября 2010

Черта Proxy предоставляет полезную основу для создания делегатов, но обратите внимание, что она предоставляет только реализации методов в Any (equals, hashCode и toString).Вы должны будете самостоятельно реализовать любые дополнительные методы пересылки.Прокси часто используется с шаблоном pimp-my-library :

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-инкубаторе есть плагин компилятора (плагин AutoProxy ), который будет автоматически реализовывать методы пересылки.Смотри также этот вопрос .

3 голосов
/ 10 октября 2010

Похоже, вы будете использовать его, когда вам нужна функциональность, подобная newtype на Haskell.

Например, следующий код на Haskell:

newtype Natural = MakeNatural Integer
                  deriving (Eq, Show)

может примерно соответствовать следующему коду Scala:

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