引言
"能力越大,责任越大。" — 蜘蛛侠的叔叔
本文档是关于Nim宏系统的教程。宏是编译期执行的函数,把Nim语法树变换成不同的树。
用宏可以实现的功能示例:
- 一个断言宏,如果断言失败打印比较运算符两边的数, myAssert(a == b) 转换成 if a != b: quit($a " != " $b)
- 一个调试宏,打印符号的值和名字。 myDebugEcho(a) 转换成 echo "a: ", a
表达式的象征性区别。 diff(apow(x,3) + bpow(x,2) + cx + d, x) 转换成 3apow(x,2) + 2b*x + c (译者注:ax^3+bx^2+cx+d 微分的结果是 3ax^2+2bx+c)
- 无类型(untyped)实参
- 类型化(typed)实参
- 静态实参
- 代码块实参
- 语法树
- 自定义语义检查
- 生成代码
- 构建你的第一个宏
- 能力与责任
- 限制
- 更多示例