Templates 使用模板构造导入

Templates 使用模板构造导入,templates,path,nim-lang,Templates,Path,Nim Lang,在一个文件中,我有几个来自同一目录的导入。如果我更改此文件的位置,而不必在导入中添加一对一“../”,我希望使用模板来构建它们,并在更改路径时使我的生活更轻松 我想知道我是否可以通过模板实现这个目标。这是我期望得到的一个例子: template importRoot(p: untyped) ??? importRoot a/b/c.nim # Resolves to import full/path/a/b/c.nim importRoot a/a.nim # Resolves to imp

在一个文件中,我有几个来自同一目录的导入。如果我更改此文件的位置,而不必在导入中添加一对一“../”,我希望使用模板来构建它们,并在更改路径时使我的生活更轻松

我想知道我是否可以通过模板实现这个目标。这是我期望得到的一个例子:

template importRoot(p: untyped) ???
importRoot a/b/c.nim # Resolves to import full/path/a/b/c.nim
importRoot a/a.nim   # Resolves to import full/path/a/a.nim

你需要一个宏。例如,沿着以下路线:

import macros

const root = "rootfolder"

macro importRoot*(paths: varargs[untyped]): untyped =
  result = newNimNode(nnkStmtList)
  let sub = !root
  for p in paths:
    add result, quote do:
      import `sub`.`p`

请注意,只需在命令行上添加一个
--path
选项可能会更简单。

谢谢。我有很多模块和文件夹,我不认为路径在这里会有帮助,但这个宏可以缓解我的痛苦。