J'ai lu un livre sur Scala et il est fait mention de modifications empilables en utilisant traits. Quelles sont modifications empilables et à quelles fins sont-ils destinés à être utilisés?Quelles sont les modifications empilables?
Répondre
La qualité fondamentale qui distingue les modifications empilables (comme la terminologie est utilisée dans scala de toute façon) est que "super" est influencé dynamiquement sur la façon dont le trait est mélangé, alors qu'en général super est une cible déterminée statiquement.
Si vous écrivez
abstract class Bar { def bar(x: Int): Int }
class Foo extends Bar { def bar(x: Int) = x }
alors pour Foo "super" sera toujours Bar.
Si vous écrivez
trait Foo1 extends Foo { abstract override def bar(x: Int) = x + super.bar(x) }
Ensuite, pour ce super méthode reste inconnue jusqu'à ce que la classe est faite.
trait Foo2 extends Foo { abstract override def bar(x: Int) = x * super.bar(x) }
scala> (new Foo with Foo2 with Foo1).bar(5)
res0: Int = 30
scala> (new Foo with Foo1 with Foo2).bar(5)
res1: Int = 50
Pourquoi est-ce intéressant? Un exemple illustratif peut être certaines données que vous souhaitez compresser, chiffrer et signer numériquement. Vous pouvez compresser puis chiffrer puis signer, ou vous pouvez chiffrer puis signer puis compresser, etc. Si vous concevez vos composants de cette manière, vous pouvez instancier un objet personnalisé avec exactement les bits que vous voulez organiser comme vous le souhaitez.
Juste pour l'élégance "trait Foo1 extends Bar" au lieu de "trait Foo1 extends Foo"? –
Boris - tu as absolument raison, c'est écrit comme ça parce que j'ai ajouté Bar à la dernière minute. – extempore
J'ai regardé Real-World Scala presentation où le terme modifications empilables est également utilisé. Apparemment, ce sont les traits qui appellent la super méthode lors du remplacement, ajoutant essentiellement des fonctionnalités et ne les remplaçant pas. Donc, vous accumulez des fonctionnalités avec des traits, et cela peut être utilisé là où en Java nous utilisons souvent des aspects. Trait joue le rôle d'un aspect, remplaçant les méthodes "intéressantes" et ajoutant les fonctionnalités spécifiques telles que la journalisation, etc., puis appelant super et "passer la balle" au trait suivant de la chaîne. HTH.
Quel merveilleux jeu de diapositives! – egaga
- 1. Quelles sont les principales modifications de syntaxe dans Ruby 1.9?
- 2. Quelles sont les modifications pour l'accès par programme aux documents Office 2010 (a.k.a Office 14)?
- 3. gridview modifiable - quelles sont les bases?
- 4. Quelles sont les alternatives pour CSharpOptParse?
- 5. Quelles sont les limites du refactoring?
- 6. Quelles sont les meilleures pratiques OOoBasic?
- 7. Quelles sont les commandes importantes de Ruby?
- 8. Quelles sont les variables initialisées en Delphi?
- 9. Quelles sont les applications réelles du rendement?
- 10. Quelles sont les alternatives "Pastie"? (installable)
- 11. Quelles sont les limites internes à WCF?
- 12. Quelles sont les valeurs SPAlert EventTypeBitmask valides?
- 13. Quelles sont les fonctionnalités cachées de Maven2?
- 14. Quelles sont les options disponibles pour VisualSVNServerHooks.exe?
- 15. Quelles sont les bonnes expressions régulières?
- 16. Quelles sont les chaînes vraiment dans .NET?
- 17. Quelles sont les alternatives à ClickOnce?
- 18. Compresseur YUI: Quelles sont les micro-optimisations?
- 19. Quelles sont les causes d'une erreur fsockopen()?
- 20. Quelles sont les différences entre les délégués et les événements?
- 21. Quelles sont les meilleures pratiques pour gérer les informations sensibles?
- 22. Quelles sont les règles concernant les chemins httpHandler dans ASP.NET?
- 23. Quelles sont les spécifications HW recommandées pour les virtualisations?
- 24. Quelles sont les bonnes ressources pour apprendre sur les génériques?
- 25. Quelles sont les bonnes ressources pour comprendre les MIB SNMP?
- 26. Quelles sont les ressources pour apprendre à écrire les spécifications?
- 27. Apache Velocity: Quelles sont les variables disponibles dans les templates?
- 28. Quelles sont les utilisations intéressantes pour les agents Java?
- 29. Quelles sont les meilleures pratiques pour les URL publiques «privées»?
- 30. Quelles sont les règles pour nommer les classes AS3?
Le livre l'explique dans le chapitre trait. – Rayne