在接口中使用常量作为默认参数值:IDE可以,但是mxmlc失败吗?

问题描述

| 该代码似乎可以在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
            {        
            }
    }
 }
    

解决方法

        根据Senocular,这全都与编译顺序有关。没有明确的方法来设置此顺序。 您可以使用定义编译器选项来定义内联常量,以避免出现此问题。 另一种方法是创建一个包含常量的库。库包含在用户类之前。 要创建库,请使用组件编译器:
compc -output lib\\Constants.swf -source-path src -include-classes Constants
编译应用程序时,包括该库:
mxmlc -include-libraries lib\\Constants.swf -- src\\Main.as
只是不要忘记在常量更改时重新编译该库,或者使用处理该问题的构建脚本。 对示例代码的简短注释: 接口不需要使用该常量,任何值都可以使用,并且对实现类具有相同的效果。 编程AS3-接口   实现此类函数声明的方法必须具有默认参数值,该默认参数值与接口定义中指定的值属于同一数据类型,但是实际值不必匹配。