跳到主要内容
版本:master

变量声明

语法

  • (public|protected|private)? (const | static)? (parallel | readonly)? 类型|auto 标识符 (= 表达式)? ;

描述

在不同语境下,变量声明拥有不同的含义:

对于不同的声明目标,声明变量时能够使用的修饰符也略有不同:

  • 对象的成员变量

    对象的成员变量也可以被声明为 const。如果这么做,可以使用 publicprotectedprivate 修饰符来控制成员变量的访问权限。除此之外不能使用 其他修饰符。

    使用 const 声明的是脚本的常量,常量声明时必须提供一个编译期可以被求值的初始值。常量可以按照修饰其 访问权限,被外部访问。

    常量的默认访问级别是 public


    如果一个成员变量未被修饰为 const,那么:对象的成员变量可以被声明为 parallelreadonly 的,这表示该成员变量可以被 parallel 函数访问。此外,如果 parallelreadonly 的成员变量类型为 引用容器类型, 那么该成员变量只能被赋值为 readonly 或 parallel 的实例。

    可以声明 静态成员变量,静态字段应当被声明为 parallelreadonly 的。

    对于非常量的成员变量,不能使用访问权限修饰,这些成员变量都只能在 当前 脚本访问。

  • 局部变量

    只能使用 const 声明局部变量,其他修饰符均不能使用。

  • 类的成员变量

    在声明类的成员变量时,可以使用 publicprotectedprivate 修饰符来控制成员变量的访问权限。

自动推导类型

使用 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); // 决不应该这么做