35 votes

Pourquoi sélectionner les membres d'un type Scala avec un hachage au lieu d'un point ?

En Scala, la syntaxe de la sélection d'un type dans une classe est différente de celle de la sélection de toute autre chose dans une classe. En effet, la première utilise un dièse comme opérateur de sélection au lieu d'un point. Pourquoi ?

Exemple : Si nous avons une classe comme ça...

class Example {
    type Foo = String
}

Pourquoi sélectionnons-nous le type de la classe comme ceci...

val example:Example#Foo = "1"

au lieu de comme ça ?

val example:Example.Foo = "1"

45voto

Jean-Philippe Pellet Points 25240

Example#Foo est appelé projection de type et correspondra à n'importe quel type Foo de toute instance englobante de type Example . Si vous écrivez un type Example.Foo le compilateur recherchera l'élément valeur (et non tipo ) appelé Example et se référera à son enveloppe Foo uniquement. Ceci est souvent utilisé dans le contexte des objets singleton.

Par exemple :

object MyEnum extends Enumeration {
  val EnumValue = Value
}

val e: MyEnum.Value = MyEnum.EnumValue

Si Scala utilisait . pour les projections de type, cela entraînerait une confusion car l'identifiant précédent pourrait être interprété soit comme un type, soit comme une valeur D'où l'utilisation de l'option # . Notez que, comme l'écrit @kassens, Java sólo a des projections de type à cet égard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X