有没有办法让flash as3编译器需要静态输入?我有一个不做的坏习惯,让它抛出编译器错误会很好。在as3的发布设置中,我打开了“严格”,但这并没有真正改变任何内容。
答案 0 :(得分:4)
我有点困惑。这不会给你任何编译时错误:
function enforceType(var_a:int, var_b:String) {
trace("passed");
}
enforceType(1, 'test');
enforceType(1, 1);
enforceType('test', 1);
这对我来说当然有用。
修改强>
由于您编辑了问题,我将编辑我的答案
AS3 IS 静态类型 IF 您明确键入变量。
示例:
var a:int = 0;
a = "TEST";
// a is typed as an int, therefor when you attempt to compile the above,
// you will get a compile time error
// 1067: Implicit coercion of a value of type String to an unrelated type int.
var a = 0;
a = "TEST";
// Here, a is not typed explicitly, so you can assign whatever type you want, and
// the compiler will not complain.
因此,简而言之,AS3是静态类型的,如果你想要的话。没有办法让编译器知道你真正想要分配的类型,因为它是编译期间的静态类型。
想象一下,例如,您在类Foo中定义了一个非类型化的静态变量条。
package
class Foo {
public static var bar;
}
}
现在,您可以在程序的两个不同位置访问Foo。这两个不同的访问点基于由于用户交互而触发的事件,如鼠标单击。在您的两个事件处理程序中,您有以下内容:
// In one handler you have
Foo.bar = 1;
// and in another handler
Foo.bar = "test";
编译器无法知道哪个将首先运行,因为它们都基于用户交互。所有编译器都可以这么说:如果发生这种情况,可以吗?在这种情况下,由于栏没有打字,所以没关系。
如果Foo类更改为:
package
class Foo {
public static var bar:String;
}
}
然后编译器会知道上面列出的第一个事件处理程序不正常,因为bar已被静态类型化为String。
长篇短篇(以及需要学习的教训):摆脱你的坏习惯并开始输入变量。你会很高兴的。
答案 1 :(得分:1)
我使用FlexBuilder编写动作脚本。在强类型规则中断时,您会看到警告。同时警告在范围内使用相同的变量名称,未使用的导入等等。这当然与标准的AS3错误相结合。
如果没有强大的IDE,我就无法继续下去。
FlexBuilder的替代方案以相同的方式提供FDT和FlashDevlop。虽然他们可能没有所有这些功能