2.21. 常量、枚举、全局变量

Daslang 允许您将常量值绑定到全局变量标识符。 只要有可能,所有常量全局变量都将在编译时进行评估。 还有枚举,它们是强类型常量集合,类似于 C++ 中的枚举类。

2.21.1. 常量

常量将特定值绑定到标识符。常量正是全局变量。它们的值无法更改。

常量使用以下语法声明:

let foobar = 100
let floatbar = 1.2
let stringbar = "I'm a constant string"
let blah = "I'm string constant which is declared on the same line as variable"

常量从声明的那一刻起就始终是全局范围的。 任何后续代码都可以引用它们。

您无法更改此类全局变量。

常量可以是 shared:

let shared blah <- ["blah","blahh","blahh"]

共享常量指向 `Context`的不同实例中的相同内存。 它们在第一次上下文初始化期间初始化一次。

2.21.2. 全局变量

可变全局变量定义为:

var foobar = 100
var barfoo = 100

可以通过 CodeOfPolicies 在每个项目的基础上打开和关闭它们的使用。

局部静态变量可以通过 static_let 宏声明:

require daslib/static_let

def foo {
    static_let {
        var bar = 13
    }
    bar = 14
}

上面例子中的变量 bar 实际上是一个全局变量。 但是,它仅在相应的 static_let 宏的范围内可见。

全局变量可以是 privatepublic:

let public foobar = 100
let private barfoo = 100

如果未指定,则结构继承模块公开(即在公共模块中,全局变量是公共的,而在私有模块中,全局变量是私有的)。

2.21.3. 枚举

枚举将特定值绑定到名称。枚举也会在编译时进行评估,并且无法更改其值。

枚举声明为程序引入了一个新的枚举。 枚举值只能是编译时常量表达式。 不需要为 enum 分配特定值:

enum Numbers {
    zero     // 将为 0
    one      // 将为 1
    two      // 将为 2
    ten = 9+1 // 将为 10,因为它明确指定了
}

枚举可以是 privatepublic:

enum private Foo {
    fooA
    fooB
}

enum public Bar {
    barA
    barB
}

如果未指定,枚举将继承模块公开(即在公共模块中,枚举是公共的,而在私有模块中,枚举是私有的)。

枚举名称本身是一个强类型,所有枚举值都属于此类型。 枚举值可以寻址为 ‘enum name’ 后跟精确枚举

let one: Numbers = Numbers.one

枚举值可以转换为具有显式强制转换的整数类型

let one: Numbers = Numbers.one
assert(int(one) == 1)

枚举可以指定以下存储类型之一:int, int8, int16, uint, uint8, 或 uint16:

enum Characters : uint8 {
    ch_a = 'A'
    ch_b = 'B'
}

枚举值将被截断为存储类型。

`each_enum`迭代器迭代特定的枚举类型值。 需要提供任何 enum 元素来指定枚举类型:

for ( x in each_enum(Characters ch_a) ) {
    print("x = {x}\n")
}