10
votes

Flèche droite dans le corps de classe à Scala

regarder via le code source Scala, je suis tombé sur énumération.scala : xxx

Quel est le thisenum => pour ? Je n'ai trouvé aucune information dans le livre "Programmation in Scala".


3 commentaires

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?


4 Réponses :


2
votes

C'est un type auto . 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.

Tout ce qui a fait, dans cet exemple, vous assurez-vous que ivisenum se référerait à énumération 'S Ceci de n'importe quel intérieur de Énumération .


3 commentaires

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" au lieu de "Sous-classe" ?


@Chals j'ai fait, corrigé. Merci.



9
votes

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: xxx

Jusqu'à présent, mais malheureusement, un problème se pose si vous essayez de définir un trait Simplerecipes comme celui-ci: xxx

Le problème ici est que poire 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 Simplerecipes n'est jamais mélangé avec SIMPLEFOODS .
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 .
Pragmatiquement, Un type Soi Spécifie les exigences de tout cours de béton que le trait est mélangé dans .
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 de simplefoods , comme indiqué: xxx

Compte tenu du nouveau type de soi, poire est maintenant disponible.
Implicity, la référence à poire est considérée comme ceci.pear .
Ceci est sûr, car toute classe de béton qui se mélange dans Simplerecipes doit également être un sous-type de simplefoods , ce qui signifie que poire 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 le ceci.pear échouera


0 commentaires

1
votes

Ce n'est pas une annotation de type auto-type, mais juste un alias pour ceci car il n'y a pas de type requérant impliqué dans la question, cochez cette Question


0 commentaires

0
votes

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 ‘=>’


0 commentaires