请考虑以下几点:
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
模板“内部”之外的代码块,因为:它仅用于模板扩展,并且:它作为参数传递,而不是在外部使用。
我被迫使用一些肮脏的东西,现在我已经弄脏了我的全球范围来完成这项工作?