2010-10-10 11 views

Respuesta

12

El rasgo aproximación proporciona una base útil para la creación de delegados, pero tenga en cuenta que sólo 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 utiliza a menudo con el 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 
} 

La librería estándar también contiene un conjunto de rasgos que son útiles para la creación de proxies de recogida (SeqProxy, SetProxy, MapProxy, etc).

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

+1

La versión activa de ese complemento es autoproxy-lite: https://github.com/kevinwright/Autoproxy-Lite –

3

Parece que lo usarías cuando necesitas la funcionalidad newtype de Haskell.

Por ejemplo, el siguiente código Haskell:

newtype Natural = MakeNatural Integer 
        deriving (Eq, Show) 

puede corresponder aproximadamente al siguiente código Scala:

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

¿Entonces esto es básicamente maquinaria para crear delegados? –

+0

@JensSchauder, sí. – missingfaktor

Cuestiones relacionadas