在块的声明部分中声明的变量的 作用域 从声明点到块结束有效。 如果块包含第二个块,其中标识符被重新声明,则在该块内,第二个声明将是有效的。 跳出内部区块后,第一个声明再次有效。 除非对过程或迭代器重载有效,否则不能在同一个块中重新定义标识符。
元组或对象定义中的字段标识符在以下位置有效:
- 到元组/对象定义的结尾。
- 给定元组/对象类型的变量的字段指示符。
- 在对象类型的所有后代类型中。
模块的所有标识符从声明点到模块结束都是有效的。 来自间接依赖模块的标识符 不 可用。 The system 模块自动导入每个模块。
如果模块通过两个不同的模块导入标识符,则必须限定每次出现的标识符,除非它是重载过程或迭代器,在这种情况下会发生重载解析:
- # 模块B
注意 :代码重新排序是实验性的,必须通过 {.experimental.} 启用。
示例:
- {.experimental: "codeReordering".}
- proc foo(x: int) =
- bar(x)
- proc bar(x: int) =
- echo(x)
变量也可以重新排序。 初始化 的变量(即将声明和赋值组合在一个语句中的变量)可以重新排序其整个初始化语句。 小心顶级执行代码:
- {.experimental: "codeReordering".}
- proc a() =
- b()
- proc b() =
- echo("Hello!")
- a()