模板

模板是简单形式的宏: 它是运行于 Nim 的抽象语法树的简单替换机制。编译器在语义分析阶段处理它。

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

Example:

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

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

a > b 转换为 b < a。
a in b 转换为 contains(b, a)。
notin 和 isnot 的转换也显而易见。

模板中的 “类型” 可以使用 untyped 、typed 或 typedesc 等三个符号。 这些都是 “元类型” ,它们仅用于特定上下文中。常规类型也可使用;这意味着会得到一个 typed 表达式。