在 Nim 模板中:作为这个问题的后续,我想到了通过使用重载,甚至在这种情况下,使用普通包装来解决默认参数不可用的问题。不过,如果没有什么东西再次击中粉丝就太好了,让我分享一下:
请注意,bodyFinally
现在这是一个硬(必须指定)参数。
template tpl(x: bool, body: untyped, bodyFinally: untyped): void =
if x: body
else: bodyFinally
# we add a convenience helper with 2 args here.
template tpl2(x: bool, body: untyped): void =
tpl(x) do:
body
do:
discard
#call site:
var r: int
tpl2(true) do:
r = 2
很酷(它有效)。虽然这不是我的第一枪tpl2
;这是:
template tpl2(x: bool, body: untyped): void =
tpl(x, body, discard)
因为这就是do
所谓的重写的东西。除了我们得到:
错误:预期的表达式,但发现“关键字丢弃”
那是怎么回事?