.. _constants_and_enumerations: ========================================= 常量、枚举、全局变量 ========================================= .. index:: single: Constants, Enumerations, Global variables Daslang 允许您将常量值绑定到全局变量标识符。 只要有可能,所有常量全局变量都将在编译时进行评估。 还有枚举,它们是强类型常量集合,类似于 C++ 中的枚举类。 -------- 常量 -------- .. index:: single: Constants 常量将特定值绑定到标识符。常量正是全局变量。它们的值无法更改。 常量使用以下语法声明:: 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`的不同实例中的相同内存。 它们在第一次上下文初始化期间初始化一次。 --------------- 全局变量 --------------- 可变全局变量定义为:: 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 如果未指定,则结构继承模块公开(即在公共模块中,全局变量是公共的,而在私有模块中,全局变量是私有的)。 .. _enumerations: ----------- 枚举 ----------- .. index:: single: Enumerations 枚举将特定值绑定到名称。枚举也会在编译时进行评估,并且无法更改其值。 枚举声明为程序引入了一个新的枚举。 枚举值只能是编译时常量表达式。 不需要为 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") }