这是什么语法:template tplname{op(id,[id2])}(params)

What is this syntax: template tplname{op(id,[id2])}(params)

在json模块中:

template simpleGetOrDefault*{`{}`(node, [key])}(node: JsonNode, key: string): JsonNode = node.getOrDefault(key)

花括号怎么了(里面有什么)?

这是一个 "term-rewriting macro" 的例子。

稍早一点,在 json 模块中,您会找到具有以下签名的 {} 运算符的定义:

proc `{}`*(node: JsonNode, keys: varargs[string]): JsonNode =
  ## Traverses the node and gets the given value. If any of the
  ## keys do not exist, returns ``nil``. Also returns ``nil`` if one of the
  ## intermediate data structures is not an object.

term-rewriting 宏的目标是拦截只有一个字符串作为运算符参数的情况,并将其转换为对 getOrDefault.[=14 的简单调用=]