L'initialisation d'une classe anonyme avec un trait
Quelqu'un peut-il m'aider à comprendre le comportement suivant?
Il suffit de mettre: quelle est la différence entre les deux cas suivants où...
Je définir une classe simple c
+ trait t
scala> class c {val x=true; val y=this.x}
defined class c
scala> trait t {}
defined trait t
Je peux instancier un nouveau "c t"
scala> new c with t
res32: c with t = $anon$1@604f1a67
Mais je ne peux pas instancier un nouveau "[classe anonyme comme c] avec t"
scala> new {val x=true; val y=this.x} with t
<console>:9: error: type mismatch;
found : type
required: ?{def x: ?}
<console>:9: error: value x is not a member of object $iw
new {val x=true; val y=this.x} with t
Quelle est la différence entre ces deux cas?
Merci!
Vous devez vous connecter pour publier un commentaire.
Vous avez trébuché sur "début de la définition de syntaxe" ( plus d'infos ).
Consultez la section 5.1.6 de la spécification du langage:
Dans votre cas, le problème est avec
this.x
. Si vous le remplacer justex
, si vous faites allusion à la "précédant le début de définition", comme mentionné dans la dernière phrase ci-dessus (merci, @som-snytt !), il compile.Bien sûr, vous n'avez probablement pas l'intention d'écrire un début d'initialiseur, alors il suffit d'écrire que par Kristian Domagala de réponse.
new {val x=true; val y=x} with t
Est-ce que vous êtes après:
Si vous avez un autre trait de caractère,
u {}
, vous pouvez écrirenew t with u {val x=true; val y=this.x}