Właśnie znalazłem to in the API i chciałbym zobaczyć jeden lub dwa przykłady wraz z wyjaśnieniem, na co to jest dobre.Jak korzystać z cechy scala.Proxy
Odpowiedz
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.
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
}
Więc to w zasadzie maszyny do tworzenia delegatów? –
@JensSchauder, tak. – missingfaktor
Aktualnie aktywna wersja tej wtyczki to autoproxy-lite: https://github.com/kevinwright/Autoproxy-Lite –