• 模板

    模板

    模板是宏的一种简单形式:它是一种简单的替换机制,可以在Nim的抽象语法树上运行。 它在编译器的语义传递中处理。

    调用 模板的语法与调用过程相同。

    示例:

    1. template `!=` (a, b: untyped): untyped =
    2. # 此定义存在于系统模块中
    3. not (a == b)
    4.  
    5. assert(5 != 6) # 编译器将其重写为:: assert(not (5 == 6))

    !=, >, >=, in, notin, isnot 运算符实际上是模板:

    a > b 变换成 b < a.a in b 变换成 contains(b, a).notinisnot 见名知意。

    模板的“类型”可以是符号 untypedtypedtypedesc 。 这些是“元类型”,它们只能在某些上下文中使用。 也可以使用常规类型;这意味着需要 typed 表达式。

    • 类型化和无类型形参
    • 向模板传代码块
    • 无类型可变参数
    • 模板符号绑定
    • 标识符构造
    • 模板形参查询规则
    • 模板卫生
    • 方法调用语法限制