2017-10-12 23 views
1

Donc, la question est dans le titre. J'ai déclaré certaines propriétés dans mes classes en utilisant le mot clé 'never', donc je ne peux définir les valeurs de ces propriétés qu'une seule fois, dans le constructeur. Cependant, je reçois l'erreur suivante:Les propriétés 'never' ne peuvent pas être définies à l'intérieur du pays

Impossible d'accéder à champ ou identifiant% name% pour l'écriture

Exemple du code problématique:

class TreeAbility 
{ 

     public var id(default, never):String; 
     public var maxLvl(default, never):Int; 

     public function new(id:String, maxLvl:Int) 
     { 
      Assert.assert(maxLvl > 0); 

      this.id = id; (*) 
      this.maxLvl = maxLvl; (*) 
      this.currentLvl = 0; 
     } 

} 

Les lignes marquées avec (*) jeter l'erreur d'accès

Répondre

3

Je crois que jamais écriture signifie que l'écriture/définition de la variable n'est jamais autorisée, même dans le constructeur. Voir: https://haxe.org/manual/class-field-property.html

Peut-être que vous cherchez le mot-clé finale , qui vient dans Haxe 4. Pour champs d'instance, il permet d'affecter à la variable uniquement à partir du constructeur de la classe. Confirmé ici: https://haxe.org/download/version/4.0.0-preview.2/ et https://github.com/HaxeFoundation/haxe/issues/6584

+0

_never_ décrit en détails sur l'ancienne version du site. Il contient également les exemples d'affectation d'une valeur à une propriété never-write dans le constructeur. Mais OK, peut-être que _never_ a déjà fonctionné de cette façon dans le passé http://old.haxe.org/ref/properties – Gulvan

+0

Il suffit de lire le journal des modifications 4.0.0. Maintenant, j'ai l'hypothèse que seules les propriétés statiques sans écriture peuvent être définies dans le constructeur – Gulvan

+2

Sur l'ancien site web, l'exemple que je vois en utilisant la propriété "never" n'écrit pas "numItems". "container.numItems" appelle "get_numItems()" dans les coulisses, mais aucune variable appelée "numItems" n'existe sur l'instance dans le code final. –