模板

模板是宏的一种简单形式:它是一种简单的替换机制,可以在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 表达式。