问题描述
下面的代码无法编译,因为 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