在块的声明部分中声明的变量的 作用域 从声明点到块结束有效。 如果块包含第二个块,其中标识符被重新声明,则在该块内,第二个声明将是有效的。 跳出内部区块后,第一个声明再次有效。 除非对过程或迭代器重载有效,否则不能在同一个块中重新定义标识符。

    元组或对象定义中的字段标识符在以下位置有效:

    • 到元组/对象定义的结尾。
    • 给定元组/对象类型的变量的字段指示符。
    • 在对象类型的所有后代类型中。

    模块的所有标识符从声明点到模块结束都是有效的。 来自间接依赖模块的标识符 可用。 The system 模块自动导入每个模块。

    如果模块通过两个不同的模块导入标识符,则必须限定每次出现的标识符,除非它是重载过程或迭代器,在这种情况下会发生重载解析:

    1. # 模块B

    注意 :代码重新排序是实验性的,必须通过 {.experimental.} 启用。

    示例:

    1. {.experimental: "codeReordering".}
    2.  
    3. proc foo(x: int) =
    4. bar(x)
    5.  
    6. proc bar(x: int) =
    7. echo(x)
    8.  

    变量也可以重新排序。 初始化 的变量(即将声明和赋值组合在一个语句中的变量)可以重新排序其整个初始化语句。 小心顶级执行代码:

    1. {.experimental: "codeReordering".}
    2.  
    3. proc a() =
    4. b()
    5. proc b() =
    6. echo("Hello!")
    7.  
    8. a()