模板
模板是宏的一种简单形式:它是一种简单的替换机制,可以在Nim的抽象语法树上运行。 它在编译器的语义传递中处理。
调用 模板的语法与调用过程相同。
示例:
- template `!=` (a, b: untyped): untyped =
- # 此定义存在于系统模块中
- not (a == b)
- 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 表达式。