2017-10-16 34 views
3

我是lua新手。我有一个查询从表中读取文件。 我在Lua表格式的配置文件: 例如:如何读取包含lua表的配置文件

return { 
    ["param1"] = { 
     ["attribute"] = { 
      ["myparam"] = 1, 
     }, 
    ["param2"] = 1 
} 

我如何读取这个文件,并访问我的配置文件的参数?

+1

配置文件是一个坏主意。小心这些 – Matt

+1

你忘了'},关闭第一个“param1”表 –

回答

2

如果你想使用其他的Lua脚本来读取配置文件:

configdata =需要 '需要'( “CONFIGFILE”)

注意只能装载Lua的档案。 另外,使用'require'时不要包含'.lua'扩展名。

+0

你的“硬道路”完全是废话。你按行读取文件并重新连接(quadratically slow!只需打开文件和“:read”* a“' - 你不会更改任何内容)。然后,将结果loadtring(这是一个可以随时调用的函数),但是立即调用它,因此首先包装内部代码以将实际代码作为函数分配给全局变量。 'configData = loadfile“config.lua”'和你的5行有相同的效果,没有任何废话。 – nobody

+0

@nobody你的评论方式完全是废话。你也可以建议我使用':read'* a''来代替io.lines,而不要试图侮辱我。另外,在调用它愚蠢之前,请先阅读“硬”模式背后的原因。 我通过书学习了Lua,而不是通过互联网。所以我编写代码的方式可能与你有很大的不同,但这并不意味着你应该以这种方式表达你的挫败感。 这个网站是为了学习,而不是叫某人愚蠢地写代码不同。 但thx,我会用':read“* a”'代替 –

+0

(Side-branch :)恕我直言,调用“意外二次方”代码“完全废话”就足够了。你似乎正在亲自采取,这不是预期的效果:对此感到遗憾。要查看重复级联有多糟糕,请尝试'local c =“”; for i = 1,1e6 do c = c ..“。” end'与'local t = {};对于i = 1,1e6做t [i] =“。”结束 ;本地c = table.concat(t)'。两者都连接1M个字符,但第二个需要0.5秒,第一个需要3分钟_over! (看看为什么我说这就是废话?)所以:当在一个循环中连接时,最后累积到一个表&table.concat中! – nobody

2

您可以在您的应用程序源代码中简单地使用require配置文件。包含未经检查的代码

local config = require "config" 
+1

'require'接受*模块*名称,而不是*文件*名称。 – lhf

+0

@lhf啊是的。忘记了这一点。固定。 – hjpotter92