Пожалуйста, обратите внимание на следующее:
import options
template tpl[T](a: untyped) : Option[T] =
var b {.inject.}: T = 4
a
none(int)
discard
tpl[int]:
echo b
Это строит и запускает и приводит к выводу:
4
Но если вы удалите прагму {.inject.}
, вы получите:
...шаблон/общий экземпляр отсюда
Ошибка: необъявленный идентификатор: 'b'
Я не думаю, что мы можем считать блок кода echo b
чуждым «внутренностям» шаблона, поскольку: он используется только в расширенном виде внутри шаблона и: он передается как аргумент, а не используется снаружи.
Я вынужден использовать что-то грязное, и теперь я загрязнил свою глобальную область видимости, чтобы заставить это работать?