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)
根据 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)
只是不要忘记在常量更改时重新编译库,或者使用负责处理该问题的构建脚本。
对示例代码的简短评论:
接口不需要使用该常量,任何值都可以,并且对实现类具有相同的效果。
实现此类函数声明的方法必须具有默认参数值,该值是与接口定义中指定的值具有相同数据类型的成员,但实际值不必匹配。