如何解决为什么两个不同的宏函数在 Nim 中共享变量命名空间?
下面的代码无法编译,因为 let a
变量的重新声明。
但如果第二个 test
模板注释掉它会起作用。
为什么会这样,以及如何解决?
template test*(name: string,body) =
block: body
template test*(name: string,group: string,body) =
block: body
test "a1":
let a = 1
test "a2":
let a = 1
解决方法
第一个模板的 body 参数会进行类型检查,因为在它上面有一个重载,其中在同一个地方有一个类型化的参数。我认为您现在最好的选择是删除组上的 : 字符串注释。为了解决这个问题,Nim 需要在这种情况下改变它的重载语义,在这种情况下,很明显参数不匹配,但这可能是不可预测的。
感谢 hlaaftana
在 GitHub Issue
所以固定代码是:
template test*(name: string,body) =
block: body
template test*(name: string,group,body) =
block: body
test "a1":
let a = 1
test "a2":
let a = 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。