之间有什么区别:的ActionScript - 变量声明差异
var arr3 = new Vector.<int>(6);
到
var arr3:Vector.<int> = new Vector.<int>(6);
谢谢!
之间有什么区别:的ActionScript - 变量声明差异
var arr3 = new Vector.<int>(6);
到
var arr3:Vector.<int> = new Vector.<int>(6);
谢谢!
使用第二个选项。在第一种情况下,您将收到警告消息:
Warning: Error code: 1008: variable 'arr3' has no type declaration.
第一个变量是无类型的。如果声明一个变量,但不声明其数据类型,则将应用默认数据类型*****,这实际上意味着该变量是无类型的。如果你还没有使用一个值初始化一个无类型的变量,那么它的默认值是未定义的。
第二个输入为Vector ..用Vector声明的变量。数据类型只能存储使用相同基本类型int构造的Vector实例。例如,通过调用新的Vector.()构造的Vector不能分配给用Vector声明的变量。数据类型。
这是声明变量类型和不是的区别。虽然在AS3中声明一个类型是可选的,但最好的做法是始终声明一个类型。
对你的代码的影响是,如果你声明一个类型,它只会在该类型的值被赋值给该变量时才会被正确编译和运行,并且它将被严格视为该类型的对象,没有其他的。这被称为“类型安全”。如果你没有声明一个类型,你可以给这个变量赋值任何东西,并将代码编写为任何类型的对象 - 这听起来很方便,但最终会让代码变得更加混乱,脆弱和容易出错。
另外请注意,不是声明一个类型是等于宣告它作为一个“通配符”类型,像这样:var arr3:*
下面是类型化VS代码类型变量的例子:
var untyped:*;
var string:String;
var number:Number;
var integers:Vector.<int>;
untyped = 1; // ok
untyped = "hello"; // ok
untyped = new Vector.<int>(); // ok
string = 1; // compile error
string = "hello"; // ok
string = new Vector.<int>(); // compile error
number = 1; // ok
number = "hello"; // compile error
number = new Vector.<int>(); // compile error
integers = 1; // compile error
integers = "hello"; // compile error
integers = new Vector.<int>(); // ok
if (untyped == 1) // ok
if (untyped == "hello") // ok
if (untyped.fixed) // compiles ok, but throws runtime error if "fixed" not defined on non-dynamic object
if (string == 1) // compile error, invalid comparison
if (string == "hello") // ok
if (string.fixed) // compile error, "fixed" not a property of String
if (number == 1) // ok
if (number == "hello") // compile error, invalid comparison
if (number.fixed) // compile error, "fixed" not a property of Number
if (integers == 1) // compile error, invalid comparison
if (integers == "hello") // compile error, invalid comparison
if (integers.fixed) // ok
这些编译错误有助于向您(或其他开发人员)在变得难以追查SWF中的问题之前向您显示错误。例如,考虑这种无类型代码:
var value = "hello";
if (value.x < 10) { }
该代码没有太大意义,但它会编译。然后,当您尝试执行if
语句并在String
“hello”上找不到x
时,您将遇到运行时错误。在现实生活中,你可能需要做大量的狩猎才能弄清楚什么是错误的,特别是如果这两条线彼此靠得不近。不过,如果程序员已经指定的变量类型,它将使代码更安全类型:
var value:Point;
if (value.x < 10) { }
在这种情况下,如果你想分配value = "hello"
代码将无法编译。编译器也会验证x
是Point
类型的属性。如果不是,那么你也会在那里发现一个编译错误。它甚至知道x
可以使用<
进行比较,因为它是Number
。这对于尽早发现错误非常有帮助。
除了使程序员对代码更清楚之外,它还使创作工具更加清晰 - 大多数创作工具会为类型化对象提供更好的代码完成建议,因为它确切知道哪些属性和方法该类型的对象具有。
由于这些原因和其他原因,您很少会发现不使用严格类型声明的AS3代码示例,并且大多数程序员(包括我)会建议您始终使用它们。
大家的好答案。但真正的答案会更进一步。在情况1中变量没有类型,而在情况2中变量具有类型。不同的是,在第二种情况下,编译器能够为您提供信息,以防万一代码中出现错误。在第一种情况下,如果代码中出现错误,编译器可能会提供一些信息甚至根本没有信息。如果使用非类型化变量(情况1),则如果代码中存在任何错误,则开发人员将自行开发。你将成为寻找他们并尝试修复他们的人。在第二种情况下,编译器会告诉你哪里存在错误,并且很可能是为什么存在错误。
我想你错过了我的答案。 ;) – Aaron 2015-02-10 17:37:20
这不是他的问题,他问两个选项之间的区别。 – DodgerThud 2015-02-10 14:29:50