使用模板构造导入

Using templates to construct import

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

我想知道我是否可以使用模板实现此 objective。这是我期望得到的示例:

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 选项可能更容易。