我想将 Nim 程序的所有文本和属性存储在单独的文件中,如下所示:
my.properties:
some=Some
say.hello=Hello world
并使用这样的键/值:
my_module.nim:
import properties
const
some = getProperty("some")
greeting = getProperty("say.hello")
...
# using of those constants
因此,我编写了 properties.nim 模块,用于在编译期间从properties-file中检索和解析属性。
properties.nim:
import tables, strutils
const content = "./my.properties".staticRead
proc parseProperties (): Table[string, string] =
result = initTable[string, string]()
for line in content.splitLines:
let tokens = line.split("=")
result[tokens[0]] = tokens[1]
const properties = parseProperties()
proc getProperty* (path: string): string =
return properties[path]
所以,问题是我的可执行文件中有两个 const 变量(内容和属性),我只需要在编译时才需要。
例如,我如何在编译后删除主题或为此目的编写某种宏?
更新
感谢 zah 获得如此快速的答案,所以我重写了 properties.nim :
import tables, strutils
let content {.compileTime.} = "./my.properties".staticRead
proc parseProperties (): Table[string, string] {.compileTime.} =
result = initTable[string, string]()
for line in content.splitLines:
let tokens = line.split("=")
result[tokens[0]] = tokens[1]
let properties {.compileTime.} = parseProperties()
proc getProperty* (path: string): string {.compileTime.} =
return properties[path]
它完美无缺!
答案 0 :(得分:3)
您可以将content
和property
常量替换为附加了{.compileTime.}
pragma的常规变量。这些变量将在生成的代码中完全消除。