Использование констант в качестве значений параметров по умолчанию в интерфейсах: IDE в порядке, но mxmlc не работает? - PullRequest
6 голосов
/ 14 июня 2011

Этот код нормально компилируется в IDE, но компилятор командной строки (SDK 4.5 mxmlc.exe) сообщает «Инициализатор параметра неизвестен или не является константой времени компиляции».

senocular дает хорошее объяснение и, возможно, обходной путь, но я надеюсь на что-то более изящное (например, инструкция командной строки).

package {
    public class Constants {
        public static const CONSTANT : int = 0;
    }
}


package {
    public interface IInterface {
            function foo( param : int = Constants.CONSTANT ) : void;
    }
}

package
{
    public class Concrete implements IInterface
    {   
            public function foo(param:int=Constants.CONSTANT):void
            {        
            }
    }
 }

1 Ответ

2 голосов
/ 02 октября 2011

Согласно Senocular, все зависит от порядка компиляции.Нет явного способа установить этот порядок.

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

Другой способбудет создать библиотеку, содержащую константы.Библиотеки включены до пользовательских классов.Для создания библиотеки используйте компонентный компилятор :

compc -output lib\Constants.swf -source-path src -include-classes Constants

. При компиляции приложения включите эту библиотеку:

mxmlc -include-libraries lib\Constants.swf -- src\Main.as

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


Краткий комментарий к примеру кода:
Интерфейсу не нужно использовать эту константу, любое значениебудет делать и иметь тот же эффект на реализацию классов.

Программирование AS3 - Интерфейсы

Метод, который реализует такое объявление функции, должен иметь значение параметра по умолчанию, которое является членом того же типа данных, что изначение, указанное в определении интерфейса, но фактическое значение не должно совпадать.

...