Je viens de le trouver in the API et je voudrais voir un ou deux exemples avec une explication à quoi il est bon.Comment utiliser le trait scala.Proxy
Répondre
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.
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
}
Donc, il s'agit essentiellement de machines pour créer des délégués? –
@JensSchauder, oui. – missingfaktor
- 1. Comment changer le style de trait?
- 2. ActionScript Aligner le trait de style de trait graphique?
- 3. D'où vient le trait de mot?
- 4. Extension d'un trait et types
- 5. trait mise en œuvre
- 6. fonction de trait de pchart
- 7. MySQL remplacer les numéros après trait d'union
- 8. Traitement/Dessin au trait - Aide
- 9. Alignement de trait 2D Quartz
- 10. Comment faire pour étendre le trait de soulignement/bordure tout le long du conteneur
- 11. Algorithme de dessin au trait
- 12. Effet de dessin au trait
- 13. Comment représenter correctement un mixin/rôle/trait avec UML?
- 14. vim linebreak après trait d'union avec gq
- 15. Comment animer le dessin au trait dans le développement de l'iPhone?
- 16. Trait d'union dans les clés de matrice
- 17. Scala: Est-ce une erreur dans le trait LinkedListLike? Ce
- 18. Programme pour implémenter le trait de type is_same_type en C++
- 19. Arrêter l'encapsulation d'un texte avec trait d'union?
- 20. Comment indexer un mot avec trait d'union dans Lucene?
- 21. Comment supprimer des fichiers commençant par un double trait d'union?
- 22. Dans Silverlight 4: comment définir l'opacité d'un trait par programme?
- 23. Comment puis-je scinder cette chaîne avec un trait d'union?
- 24. comment ajouter un trait d'union entre une chaîne
- 25. Comment savoir si une classe utilise un trait
- 26. Comment utiliser le MediaController
- 27. Évadez trait d'union en PHP/mySQL requête
- 28. C++ modèle argument référence/valeur trait
- 29. Que signifie "trait A <: B"?
- 30. trait d'union dans des rails 3 itinéraire
La version actuellement active de ce plugin est autoproxy-lite: https://github.com/kevinwright/Autoproxy-Lite –