在接口中使用常量作为默认参数值:IDE没关系,但mxmlc失败了吗?

Ric*_*ven 6 interface constants actionscript-3

此代码似乎在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
            {        
            }
    }
 }
Run Code Online (Sandbox Code Playgroud)

kap*_*pex 2

根据 Senoptic 的说法,这一切都与编译顺序有关。没有明确的方法来设置此顺序。

您可以使用Define编译器选项定义内联常量以避免此问题。

另一种方法是创建一个包含常量的库。库包含在用户类之前。要创建库,请使用组件编译器

compc -output lib\Constants.swf -source-path src -include-classes Constants
Run Code Online (Sandbox Code Playgroud)

编译应用程序时,包含该库:

mxmlc -include-libraries lib\Constants.swf -- src\Main.as
Run Code Online (Sandbox Code Playgroud)

只是不要忘记在常量更改时重新编译库,或者使用负责处理该问题的构建脚本。


对示例代码的简短评论:
接口不需要使用该常量,任何值都可以,并且对实现类具有相同的效果。

AS3 编程 - 接口

实现此类函数声明的方法必须具有默认参数值,该值是与接口定义中指定的值具有相同数据类型的成员,但实际值不必匹配。