regarder via le code source Scala, je suis tombé sur Quel est le énumération.scala code>: thisenum => code> pour ? Je n'ai trouvé aucune information dans le livre "Programmation in Scala". P> P>
4 Réponses :
C'est un type auto em>. Voir la section 29.4 de la programmation à Scala Deuxième édition. Je ne pense pas que c'était couvert sur la première édition, et je ne suis pas un autour de la recherche de toute façon. P>
Tout ce qui a fait, dans cet exemple, vous assurez-vous que ivisenum code> se référerait à énumération code> 'S Ceci code> de n'importe quel intérieur de Énumération code>. P>
Je n'ai pas vu votre réponse car j'étais occupé à mettre l'extrait pertinent dans le mien. +1
+1 - Cependant, avez-vous voulu dire "Classe intérieure" i> au lieu de "Sous-classe" i>?
@Chals j'ai fait, corrigé. Merci.
La programmation de SCALA 2D Edition Introduisez le concept de type SOTE dans la section 29.4 "Modules de fractionnement en trait":
Le trait SimpleFoods pourrait avoir l'air suivant: P> blockQuote>
xxx pré> Jusqu'à présent, mais malheureusement, un problème se pose si vous essayez de définir un trait Simplerecipes comme celui-ci: P> blockQuote>
xxx pré> Le problème ici est que
poire code> est situé dans un trait différent de celui qui l'utilise, donc il est hors de portée.
Le compilateur n'a aucune idée que code> Simplerecipes CODE> n'est jamais mélangé avecSIMPLEFOODS code>.
Il y a une façon de le dire au compilateur. Scala fournit le type de soi pour cette situation précisément.
Techniquement, un type auto est un type supposé pour cela chaque fois que cela est mentionné dans la classe forte>.
Pragmatiquement, Un type Soi Spécifie les exigences de tout cours de béton que le trait est mélangé dans strong>.
Si vous avez un trait qui n'est jamais utilisé uniquement lorsqu'il est mélangé avec un autre trait ou des traits, vous pouvez spécifier que ces autres traits devraient être supposés.
Dans le cas présent, il suffit de spécifier un type auto desimplefoods code>, comme indiqué: p> blockQuote>xxx pré> Compte tenu du nouveau type de soi,
poire code> est maintenant disponible.
Implicity, la référence àpoire code> est considérée commececi.pear code>.
Ceci est sûr, car toute classe de béton qui se mélange dansSimplerecipes code> doit également être un sous-type desimplefoods code>, ce qui signifie quepoire code> sera membre. de
Les sous-classes abstraits et les traits ne doivent pas nécessairement suivre cette restriction, mais comme ils ne peuvent pas être instanciés avec de nouvelles, il n'y a aucun risque que lececi.pear code> échouera p> blockQuote> p>
Ce n'est pas une annotation de type auto-type, mais juste un alias pour
C'est vraiment une annotation de type auto. Voir la spécification officielle Scala:
HTTPS: / /scala-lang.org/files/archive/spec/2.13/13-syntax-summary.html P>
Selon cette spécification, son contexte libres EBNF Syntaxe est: P>
SelfType ::= id [â:â Type] â=>â
| âthisâ â:â Type â=>â
Stackoverflow.com/q/4017357/203968
Ils sont nommés auto-types: voir chapitre 27 Programmation modulaire à l'aide d'objets
En double possible de Qu'est-ce que => signifie à la Début d'une définition de classe Scala?