2010-10-10 5 views

Répondre

12

Le trait Proxy fournit une base utile pour la création de délégués, mais notez qu'il ne fournit des implémentations des procédés dans Any (equals, hashCode, et toString). Vous devrez implémenter toutes les méthodes de transfert supplémentaires vous-même. Proxy est souvent utilisé avec le 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 bibliothèque standard contient également un ensemble de traits qui sont utiles pour la création de procurations de collecte (SeqProxy, SetProxy, MapProxy, etc.).

Enfin, il existe un plugin de compilation dans le scala-incubateur (le AutoProxy plugin) qui implémentera automatiquement les méthodes de transfert. Voir aussi this question.

+1

La version actuellement active de ce plugin est autoproxy-lite: https://github.com/kevinwright/Autoproxy-Lite –

3

Il semble que vous l'utilisiez lorsque vous avez besoin de la fonctionnalité newtype de Haskell.

Par exemple, le code Haskell suivant:

newtype Natural = MakeNatural Integer 
        deriving (Eq, Show) 

peut correspondre approximativement à code suivant Scala:

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

Donc, il s'agit essentiellement de machines pour créer des délégués? –

+0

@JensSchauder, oui. – missingfaktor

Questions connexes