scala dynamic proxy scala-2.8

¿Cómo uso el rasgo scala.Proxy



dynamic scala-2.8 (2)

Acabo de encontrarlo en la API y me gustaría ver uno o dos ejemplos junto con una explicación de lo que es bueno.


Parece que lo newtype cuando necesites la newtype tipo newtype de Haskell.

Por ejemplo, el siguiente código Haskell:

newtype Natural = MakeNatural Integer deriving (Eq, Show)

puede corresponder aproximadamente al siguiente código de Scala:

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


El rasgo Proxy proporciona una base útil para crear delegados, pero tenga en cuenta que solo proporciona implementaciones de los métodos en Any ( equals , hashCode y toString ). Tendrá que implementar cualquier método de envío adicional usted mismo. Proxy se usa a menudo con el patrón chulo-mi-biblioteca :

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 }

La biblioteca estándar también contiene un conjunto de rasgos que son útiles para crear proxies de recopilación ( SeqProxy , SetProxy , MapProxy , etc.).

Finalmente, hay un plugin de compilador en la scala-incubator (el plugin de AutoProxy ) que implementará automáticamente métodos de reenvío. Ver también esta pregunta .