在Nim

时间:2016-07-11 09:14:44

标签: nim

我想将 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]

它完美无缺!

1 个答案:

答案 0 :(得分:3)

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