问题描述
|
该代码似乎可以在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-接口
实现此类函数声明的方法必须具有默认参数值,该默认参数值与接口定义中指定的值属于同一数据类型,但是实际值不必匹配。