Неоднозначная ссылка, когда геттер/сеттер имеют разную видимость

Следующий код создает неоднозначную ссылку на 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.

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

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

person Warren Seine    schedule 24.03.2010    source источник


Ответы (2)


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

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

person longstaff    schedule 25.03.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;
        }
    }
}
person Sandro    schedule 24.03.2010
comment
Я согласен. Спасибо, что успокоили идею. - person Warren Seine; 25.03.2010
comment
Другим решением является устранение неоднозначности вручную с помощью private::value, когда это возможно. - person Warren Seine; 25.03.2010
comment
Ух ты. Спасибо за совет. Я не знал, что вы можете устранить неоднозначность переменной таким образом. - person Sandro; 25.03.2010