¿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 .