2010-07-19 8 views
6

Dans la référence Scala 2.8, section 5.3.3 Page 69 (77 dans le pdf), le paragraphe suivant apparaît:"classe A réussit classe B" signifie dans Scala référence?

On suppose un trait D définit un aspect d'une instance de type xC (c.-à-D est une classe de base de C). Puis le supertype réel de D en est le composé type composé de toutes les classes de base en L(C) qui succèdent D.

Qu'est-ce que la notation L(C) moyens (dans le texte d'origine, il est un symbole \ell comme le capital calligraphique)? Qu'est-ce que l'expression "classes ... que succède àD" signifie? Je ne suis pas familier avec la notation.

Répondre

7

En bout de ligne, L(C) est constitué de toutes les classes de base (la hiérarchie d'héritage de l'ensemble C, y compris les traits) affichés en tant que chaîne, avec Any en haut et en bas C. RéussiD signifie, est plus élevé dans la chaîne puisD. L'explication la plus longue est que nous voulons connaître, pour chaque classe, son "parent" - à des fins de mise en œuvre et de clarté générale (c'est terriblement désordonné en C++, où l'héritage multiple non borné est autorisé). En Java, c'est simple - vous n'avez qu'une seule superclasse directe. Cependant, en raison de la composition de classe de mixage dans Scala, qui est une forme d'héritage multiple (d'une superclasse + peut-être plusieurs traits), les classes de base de n'importe quelle classe forment un graphe acyclique dirigé. L (C) est la linéarisation des classes de base de C - en commençant par la superclasse, et en ajoutant les traits (et leurs classes de base) de telle sorte qu'ils forment une chaîne et chaque classe a ses propres classes de base. Vous pouvez en lire plus à ce sujet dans la section 6 de the overview of Scala. C'est un bon aperçu complet de la fonctionnalité.

+0

En fait, je pense que "réussit D" signifie * est ** plus élevé ** sur la chaîne que D *. La définition dit que les traits qui réussissent D sont ses supertypes par rapport à une instance de C. –

+0

Oui, il semble que vous ayez raison. Fixer la réponse – finrod

+0

aucun rapport avec la question, encore je suis curieux, quelle est votre langue maternelle? Vous vous êtes référé à la classe comme une femme "... chaque classe a * son * propre ..." et je me demande d'où cela vient-il. Je suppose que la classe semble féminine dans votre langue maternelle. –

2

L (C) est class linearization. Puis "réussit" en ce qui concerne la position dans la séquence de résultats. La linéarisation est définie au chapitre 5.1.2 de the spec.

Questions connexes