Lua - 检查用户输入的表是否存在并从中读取

时间:2014-05-01 00:14:56

标签: function variables lua key-value lua-table

首先,让我解释一下我的设置。我有2个lua文件:一个是要运行的主程序,另一个是配置文件。在主程序中,它运行一次配置文件并将所有表加载到内存中。如果我想添加新配置,我不想重新编程主程序,我希望能够在配置文件中添加新表。

主程序:

-- Read config
dofile("config.lua")

-- Ask for ID
inputtedID = io.read()
-- Check if it exists
if string.format("%s[enabled]", inputtedID) then
    -- If table exists and enabled key is set to true
    print('"' .. inputtedID .. '" does exist!')
else
    -- If the table doesn't exist or the key is false
    print('"' .. inputtedID .. '" does not exist')
end

配置文件:

Public = {
enabled = true,
directory = "whatever"
}
Snapshot = {
enabled = true,
directory = "something"
}
-- So forth and so on

每个表都有相同的键要读取,但我们需要关注的是enabled键。这就把我们带到了......

我希望它获取用户输入,检查是否有与用户输入匹配的表,并检查该表中的enabled键值是否为true。如果表不存在或值为false,则只需运行一组要求重试的不同代码。

具体而言,只要我在引用或使用表格时尝试使用变量,我就会陷入困境。我不知道怎么做,也不知道应该怎么做。

1 个答案:

答案 0 :(得分:2)

所有全局变量都是全局表的成员,称为_G,然后您可以使用变量名称对其进行索引:

-- Read config
dofile("config.lua")

-- Ask for ID
inputtedID = io.read()

-- Check if it exists
if _G[inputtedID] and _G[inputtedID].enabled then
    -- If table exists and enabled key is set to true
    print('"' .. inputtedID .. '" does exist!')
else
    -- If the table doesn't exist or the key is false
    print('"' .. inputtedID .. '" does not exist')
end