变量声明
语法
描述
在不同语境下,变量声明拥有不同的含义:
对于不同的声明目标,声明变量时能够使用的修饰符也略有不同:
-
对象的成员变量
对象的成员变量也可以被声明为
const。如果这么做,可以使用public、protected或private修饰符来控制成员变量的访问权限。除此之外不能使用 其他修饰符。使用
const声明的是脚本的常量,常量声明时必须提供一个编译期可以被求值的初始值。常量可以按照修饰其 访问权限,被外部访问。常量的默认访问级别是
public。
如果一个成员变量未被修饰为
const,那么:对象的成员变量可以被声明为parallel或readonly的,这表示该成员变量可以被 parallel 函数访问。此外,如果parallel或readonly的成员变量类型为 引用容器类型, 那么该成员变量只能被赋值为 readonly 或 parallel 的实例。可以声明 静态成员变量,静态字段应当被声明为
parallel或readonly的。对于非常量的成员变量,不能使用访问权限修饰,这些成员变量都只能在
当前脚本访问。 -
局部变量
只能使用
const声明局部变量,其他修饰符均不能使用。 -
类的成员变量
在声明类的成员变量时,可以使用
public、protected或private修饰符来控制成员变量的访问权限。
自动推导类型
使用 auto 关键字声明变量时,编译器将以初始值表达式的类型:
auto a = 10; // 如同 `int a = 10;`
auto b = "Hello"; // 如同 `string b = "Hello";`
使用 auto 声明变量时,必须提供初始值表达式。
如果类型被推导为 mixed,编译器会给出警告信息;
mixed foo()
{
// ...
}
auto a = foo(); // 警告:变量 'a' 的类型被推导为 mixed
未初始化的变量
注意,任何情况下都不应该声明未初始化的常量变量。
GS 允许声明未初始化的非常量变量(尽管这不推荐):
int a;
不应当期待未初始化的变量里面储存的值。
int a;
// writeln(a); // 决不应该这么做