使用type()函数查看当前字符串是否作为表存在

时间:2011-03-09 18:26:07

标签: lua

是否可以查看字符串是否与表名相同?

例如: 我知道存在一个名为'os'的表,我有一个字符串"os"。 有没有办法做到这一点:

x="os"
if type(x)=="table" then
    print("hurra, the string is a table")
end

当然这个例子不会像我想要的那样工作,因为

type(x)

将返回“string”。

我想要这样做的原因只是因为我想列出所有现有的Lua表,所以我制作了这段代码:

alphabetStart=97
alphabetEnd=122

function findAllTables(currString, length)

    if type(allTables)=="nil"   then
        allTables={}
    end

    if type(currString)=="table" then
        allTables[#allTables+1]=currString
    end

    if #currString < length then
        for i=alphabetStart, alphabetEnd do
            findAllTables(currString..string.char(i), length)
        end
    end
end

findAllTables("", 2)

for i in pairs(allTables) do
    print(i)
end

如果有一个更简单的方法来列出所有现有的表格,我不会感到惊讶,我只是为了学习Lua的过程中的乐趣。

2 个答案:

答案 0 :(得分:17)

如果要迭代所有全局变量,可以使用for循环迭代存储它们的_G表:

for k,v in pairs(_G) do
    print (k,v)
end

k将保留变量名称,v将保留该值,因此您可以使用type(v)检查变量是否为表。

要回答原始问题,您可以使用_G[varName]按名称获取全局变量。因此type(_G["os"])会给"table"

答案 1 :(得分:4)

interjay提供了实际操作的最佳方式。如果您有兴趣,可以在lua manual找到有关原始问题的信息。基本上,你想要:

mystr = "os"

f = loadstring("return " .. mystr);

print(type(f()))

loadstring创建一个包含字符串中代码的函数。运行f()执行该函数,在这种情况下只返回字符串mystr中的内容。