在 Nim 中编译后删除常量

Remove constant after compilation in Nim

我想将我的 Nim 程序的所有文本和属性存储在单独的文件中,如下所示:

my.properties:

some=Some
say.hello=Hello world

并像这样使用那些 key/values:

my_module.nim:

import properties

const
  some = getProperty("some")
  greeting = getProperty("say.hello")

...
# using of those constants

因此,我编写了 properties.nim 模块来在编译期间从属性文件中检索和解析属性。

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 变量(contentproperties ) 在我的可执行文件中,我只在编译期间需要它。

例如,我怎样才能在编译后删除主题或为此目的编写某种宏?

更新

感谢 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]

而且效果很好!

您可以将 contentproperty 常量替换为附加了 {.compileTime.} pragma 的常规变量。此类变量将在生成的代码中完全消除。