Неоднозначная ссылка, когда геттер / сеттер имеют разные видимости - PullRequest
1 голос
/ 24 марта 2010

Следующий код вызывает неоднозначную ссылку до value во время компиляции:

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.;
    }
}

Я подозреваю какую-то ошибку в компиляторе, хотя на самом деле я не читал стандарт ECMA.

Прежде чем кто-либо задаст эти вопросы:

  • Частные сеттеры имеют смысл.
  • Неопределенность также существует с пользовательскими пространствами имен (с этой проблемой я сталкиваюсь).

Ответы [ 2 ]

2 голосов
/ 25 марта 2010

это действительно ошибка в компиляторе, и она указана в ошибках . он заявил, что это слишком много разработчиков и не будет исправлено в ближайшее время.

если вам нужно специально запустить функцию для частной установки (а не просто присвоить значение, в этом случае вы можете полностью исключить функцию установки и выполнить ее), тогда вам придется запустить отдельную функцию, как сказал Сандро .

1 голос
/ 24 марта 2010

Я думаю, что это может быть ограничением AS3. Вы можете создать частную функцию setValue () или, если у вас есть сеттер, вы можете избежать этого, хотя это не очень красиво.

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;
        }
    }
}
...