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 宏的范围内可见。
全局变量可以是 private 或 public:
let public foobar = 100
let private barfoo = 100
如果未指定,则结构继承模块公开(即在公共模块中,全局变量是公共的,而在私有模块中,全局变量是私有的)。
2.21.3. 枚举
枚举将特定值绑定到名称。枚举也会在编译时进行评估,并且无法更改其值。
枚举声明为程序引入了一个新的枚举。 枚举值只能是编译时常量表达式。 不需要为 enum 分配特定值:
enum Numbers {
zero // 将为 0
one // 将为 1
two // 将为 2
ten = 9+1 // 将为 10,因为它明确指定了
}
枚举可以是 private 或 public:
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")
}