Я хочу, чтобы хранить все тексты и свойства моей 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.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]
Таким образом, проблема заключается в том, что у меня есть два константных переменных (содержания и свойством) в моем исполняемом, что мне нужно только во время компиляции.
Как я могу, например, удалить тему после компиляции или написать какие-то макросы для этих целей?
Update
Благодаря 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]
И это прекрасно работает!
Я заметил, что если я скомпилирую свою первую версию с ** - d: release **, компилятор Nim понимает, что я хочу, и создаю тот же код в C, который я получаю, когда использую ** {. CompileTime.} ** прагма – ArtLab