2010-10-10 13 views

Odpowiedz

12

Cecha Proxy zapewnia użyteczną podstawę do tworzenia delegatów, ale należy pamiętać, że tylko dostarcza implementacje metod w Any (equals,) Będziesz musiał samodzielnie wdrożyć dodatkowe metody przekazywania. Proxy jest często używany z 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 
} 

Standardowa biblioteka zawiera również zestaw cech, które są przydatne do tworzenia proxy Collection (SeqProxy, SetProxy, MapProxy, etc).

Wreszcie istnieje wtyczka kompilatora w scala-inkubatorze (AutoProxy plugin), który automatycznie zastosuje metody przekierowania. Zobacz także this question.

+1

Aktualnie aktywna wersja tej wtyczki to autoproxy-lite: https://github.com/kevinwright/Autoproxy-Lite –

3

Wygląda na to, że użyłbyś go, gdy potrzebujesz funkcji podobnej do Haskell-a newtype.

Na przykład, następujący kod Haskell:

newtype Natural = MakeNatural Integer 
        deriving (Eq, Show) 

może w przybliżeniu odpowiadać następujący kod Scala:

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

Więc to w zasadzie maszyny do tworzenia delegatów? –

+0

@JensSchauder, tak. – missingfaktor