2010-12-09 91 views
2

有没有办法让闪存as3编译器需要静态类型?我有一个不这样做的坏习惯,它会很好地让它抛出编译器错误。在as3的发布设置中,我打开了“严格”​​,但这并没有改变任何东西。有没有办法让Flash强制静态打字?

+1

我认为你的意思是静态类型,而不是强类型。 AS3是强类型的,但静态类型不是必需的。 – Allan 2010-12-10 01:14:12

回答

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; 
    } 
} 

现在,在你的程序中两个不同的地方,你访问美孚。这两个不同的接入点基于由于用户交互而触发的事件,如鼠标点击。在你的两个事件处理您具备以下条件:

// In one handler you have 
Foo.bar = 1; 
// and in another handler 
Foo.bar = "test"; 

编译器就没有办法知道将首先运行,因为它们都是基于用户交互。所有的编译器都可以这样说:如果发生这种情况,它可以吗?在这种情况下,因为酒吧没有输入,所以没关系。

如果Foo类改为:

package 
    class Foo { 
     public static var bar:String; 
    } 
} 

编译器会知道,上面列出的第一个事件处理程序是不行的,因为门槛已经静态类型是一个字符串。

长话短说(和要学的教训):摆脱你的坏习惯并开始输入你的变量。你会很高兴你做到了。

For reference

1

我使用FlexBuilder编写我的动作脚本。在强类型违规时,您会看到警告。除了警告在范围内使用相同的变量名称,未使用的导入等等。这当然与标准的AS3错误结合在一起。

如果没有强大的IDE,我无法继续。

FlexBuilder的替代方法,其中FDT和FlashDevlop的帮助方式相同。虽然他们可能没有所有这些功能

相关问题