В шаблонах 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
предположительно переписывает. За исключением того, что мы получаем:
Ошибка: ожидалось выражение, но найдено "отбрасывание ключевого слова"
Так что же с этим?