2016-07-11 2 views
1

Я хочу, чтобы хранить все тексты и свойства моей 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] 

И это прекрасно работает!

ответ

3

Вы можете заменить постоянные константы content и property с регулярными переменными, к которым прикреплена прагма {.compileTime.}. Такие переменные будут полностью устранены в сгенерированном коде.

+0

Я заметил, что если я скомпилирую свою первую версию с ** - d: release **, компилятор Nim понимает, что я хочу, и создаю тот же код в C, который я получаю, когда использую ** {. CompileTime.} ** прагма – ArtLab

Смежные вопросы