Do 标记

作为一种特殊的简洁表示法, do 关键字可以用来将匿名过程传递给过程:

  1. var cities = @["Frankfurt", "Tokyo", "New York", "Kyiv"]
  2. sort(cities) do (x, y: string) -> int:
  3. cmp(x.len, y.len)
  4. # 使用方法加命令语法减少括号:
  5. cities = cities.map do (x: string) -> string:
  6. "City of " & x

do 写在包含常规过程参数的圆括号之后。 由 do 块表示的过程表达式,将作为最后一个参数附加到例程调用。 在使用命令语法的调用中, do 块将绑定到前面紧靠的表达式,而不是命令调用。

带参数列表或编译指示列表的 do 对应于匿名的 proc ,但是不带参数或编译指示中的 do 被视为常规语句列表。 这允许宏接收缩进语句列表作为内联调用的参数,以及 Nim 例程语法的直接镜像。

  1. # 将语句列表传递给内联宏:
  2. macroResults.add quote do:
  3. if not `ex`:
  4. echo `info`, ": Check failed: ", `expString`
  5. # 处理宏中的例程定义:
  6. rpc(router, "add") do (a, b: int) -> int:
  7. result = a + b