Je joue avec scala (scala 2.8). Supposons que j'ai une classe avec un trait imbriqué et que je veuille utiliser ce trait imbriqué comme type pour un paramètre dans le constructeur de la classe. Est-ce que c'est possible? Ceci est le plus proche que je suis venu:Caractère imbriqué dans le constructeur de la classe dans scala
class OuterClass(traitParam:OuterClass#InnerTrait) {
trait InnerTrait { }
val y:InnerTrait = traitParam
}
Sans la troisième ligne qui compile même, mais dès que je tente d'utiliser réellement le traitParam
comme InnerTrait
je reçois une erreur de compilation:
type mismatch; found: OuterClass#InnerTrait required: OuterClass.this.InnerTrait.
Je ne peux pas comprendre ce que (si quelque chose) je pourrais faire.
class OuterClass(traitParam:OuterClass.this.InnerTrait)
à la place, comme le message d'erreur peut suggérer, ne compile pas. Ai-je d'autre choix que de déplacer InnerTrait
en dehors de OuterClass
? Si vous vous demandez pourquoi je voudrais faire cela, la réponse est que dans mon code actuel, l'équivalent de OuterClass
a des paramètres de type qui seraient ensuite utilisés dans InnerTrait
. Si je le déplace à l'extérieur, je dois reformuler les paramètres de type chaque fois que je fais référence au caractère interne.