2010-03-24 17 views
1

Le code suivant soulève une référence ambiguë à value au moment de la compilation:référence lorsque Ambigu getter/setter ont différentes visibilités

import flash.display.Sprite; 

public class Main extends Sprite 
{ 
    private var _value : Number = 0.; 

    public function get value() : Number   { return _value; } 
    private function set value(v : Number) : void { _value = v; } 

    public function Main() : void 
    { 
     value = 42.; 
    } 
} 

Je soupçonne une sorte de bug dans le compilateur, bien que je ne l'ai pas fait lire la norme ECMA.

Avant que quelqu'un demande à ces questions:

  • setters privés ne font sens.
  • L'ambiguïté existe également avec les espaces de noms personnalisés (qui est le problème auquel je suis confronté).

Répondre

2

c'est effectivement un bogue dans le compilateur, et c'est listed in the bugs. Il a déclaré que c'est un surdimensionnement des développeurs et ne sera pas fixé de sitôt. Si vous devez exécuter une fonction à définir de manière privée (au lieu d'attribuer simplement la valeur, auquel cas vous pouvez ignorer complètement la fonction Setter et la faire fonctionner), vous devrez exécuter une fonction séparée en tant que Sandro. m'a dit.

1

Je pense que cela peut être une limitation de AS3. Vous pouvez créer une fonction privée appelée setValue() ou si vous avez un setter, vous pourrez peut-être vous en sortir, même si ce n'est pas très joli.

package { 
    import flash.display.Sprite; 

    public class Main extends Sprite { 
     private var __value :Number = 0; 

     public function Main(): void { 
      _value = 42; 
     } 
     public function get value():Number { 
      return __value; 
     } 
     private function set _value(v:Number):void { 
      __value = v; 
     } 
    } 
} 
+0

Je suis d'accord. Merci d'avoir réconforté l'idée. –

+2

Une autre solution consiste à désambiguïser manuellement avec 'private :: value' lorsque cela est possible. –

+0

Wow. Merci pour le conseil. Je ne savais pas que vous pourriez désambiguïser la variable de cette façon. – Sandro