La valeur récursive xxx a besoin d'un type dans Scala
Je suis confus au sujet de pourquoi Scala est de se plaindre à propos de ce code. J'ai deux classes qui dépendent les uns des autres. Lorsque j'essaie de créer une nouvelle instance de A
sans une déclaration de type, le code ne compile pas.
class A( b:B ) {
}
class B( a:A ){
}
val y = new A ( new B( y ) ); //gives recursive value y needs type
val z:A = new A ( new B( y ) ); //ok
Pourquoi le compilateur ne sait pas le type de y
quand j'ai déclaré que new A
?
source d'informationauteur Jay | 2015-08-26
Vous devez vous connecter pour publier un commentaire.
De déduire le type de
y
le compilateur doit d'abord déterminer le type de la valeur sur le côté droit de cession. Tout en évaluant la main droite du type, il rencontre de référence pour la variabley
qui est (en ce moment) toujours de type inconnu. Ainsi, le compilateur détecte un cycle de type "y
dependes sur le type dey
" et échoue.Dans le deuxième exemple, cette situation ne se produit pas parce que lors de l'évaluation du type de
new A(new B(y))
il connaît déjà le type dey
et réussit.Modifier: lorsque le type de récursivement variable utilisée
y
doit inclure un mélange de trait, il peut être déclaré comme ceci:Vous pouvez spécifier le type de
y
spécifiquement et compiler: