Var语句
Var语句声明新的局部变量和全局变量并初始化它们。 逗号分隔的变量列表可用于指定相同类型的变量:
- var
- a: int = 0
- x, y, z: int
如果给出初始值设定项,则可以省略该类型:该变量的类型与初始化表达式的类型相同。 如果没有初始化表达式,变量总是使用默认值初始化。 默认值取决于类型,并且在二进制中始终为零。
类型 | 默认值 |
---|---|
any integer type | 0 |
any float | 0.0 |
char | '\0' |
bool | false |
ref or pointer type | nil |
procedural type | nil |
sequence | @[] |
string | "" |
tuple[x: A, y: B, …] | (default(A), default(B), …) (analogous for objects) |
array[0…, T] | [default(T), …] |
range[T] | default(T); this may be out of the valid range |
T = enum | castT; this may be an invalid value |
出于优化原因,可以使用 noinit 编译指示来避免隐式初始化:
- var
- a {.noInit.}: array[0..1023, char]
如果一个proc用 noinit 编译指示注释,则指的是它隐含的 result 变量:
- proc returnUndefinedValue: int {.noinit.} = discard
隐式初始化可以用 requiresInit 类型编译指示阻止。 编译器需要对对象及其所有字段进行显式初始化。 然而它执行 控制流分析 证明变量已经初始化并且不依赖于语法属性:
- type
- MyObject = object {.requiresInit.}
- proc p() =
- # 以下内容有效:
- var x: MyObject
- if someCondition():
- x = a()
- else:
- x = a()
- # use x