Hier, Rich a attiré la «nouvelle» branche de Clojure en maître. Nous embrassons maintenant la beauté qui est deftype et defprotocol. Bien sûr, moi, venant de Haskell, je suis très tenté de définir des types comme je le ferais dans Haskell, ce qui serait pratiquement tout sauf un tuple jetable, mais je ne pense pas que cela fonctionne comme ça dans le monde de Clojure;). Dans le fil de discussion Common Mistakes pour Clojure, un gars a mentionné que l'usage excessif des structures était une erreur qu'il avait commise au début, en provenance de POO. Puisque les deftypes semblent être semblables aux structures, je me demandais si la même chose s'applique là. Donc, ma question est la suivante: quand est-ce un bon moment pour utiliser deftype?Quand dois-je utiliser deftype dans Clojure?
19
A
Répondre
13
Une zone deftype
brille est performance. Les méthodes de protocoles sont très rapides sur un deftype. Deftype peut aussi avoir des champs primitifs, donc plus de boxe lors du crunching de nombres ...
Un autre domaine pourrait être l'interopérabilité Java, puisque deftype peut implémenter des interfaces (et si AOT compilé) a une classe nommée.
En général, l'idée de base est de définir des abstractions avec des protocoles et de les implémenter avec deftype.
détails Rich sa motivation ici: http://www.assembla.com/wiki/show/clojure/Datatypes
Questions connexes
- 1. Quand utiliser let-let-if dans Clojure
- 2. Utilisation de Clojure deftype en tant que fonction paramétrée
- 3. Quand utiliser `constamment` dans clojure, comment et quand ses arguments sont-ils évalués?
- 4. Comment utiliser Zip dans Clojure?
- 5. Puis-je utiliser swank-clojure avec la branche master clojure 1.2?
- 6. Quand utiliser conserver et quand utiliser copier
- 7. Quand utiliser POJO et Quand utiliser SLSB
- 8. Scala classes dans clojure
- 9. récursif (doall) dans clojure
- 10. Quand utiliser un module et quand utiliser une classe
- 11. Quand utiliser l'activateur et quand utiliser la méthode d'usine?
- 12. Quand utiliser/proc et quand/dev
- 13. Hibernate: Quand utiliser getSession() et quand utiliser getCurrentSession()?
- 14. CompositeWPF: EventAggregator - quand utiliser?
- 15. Quand utiliser $ .extend ({...})?
- 16. Quand utiliser [MTAThread]?
- 17. Quand utiliser Hibernate?
- 18. quand utiliser openid.ax.required inopenid
- 19. Quand utiliser GWT ensureInjected()?
- 20. Quand utiliser plus d'activités
- 21. quand utiliser un singleton?
- 22. Quand utiliser reinterpret_cast?
- 23. Quand utiliser DBL_EPSILON/epsilon
- 24. Quand utiliser Parallel.For?
- 25. Rails: quand utiliser l'auto
- 26. Quand utiliser un SQLTransaction
- 27. Quand exactement utiliser UrlEncode?
- 28. Quand utiliser l'opérateur "^"
- 29. Quand utiliser un singleton?
- 30. Quand utiliser l'aide
Il serait un peu comme Haskell, en ce que les protocoles sont comme des types de données et classes de types comme ... bien des types de données. : p – Rayne