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

Mic*_*ahl 11 lua

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

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

x="os"
if type(x)=="table" then
    print("hurra, the string is a table")
end
Run Code Online (Sandbox Code Playgroud)

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

type(x)
Run Code Online (Sandbox Code Playgroud)

只会返回"字符串".

我想要这样做的原因只是因为我想列出所有现有的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
Run Code Online (Sandbox Code Playgroud)

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

int*_*jay 17

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

for k,v in pairs(_G) do
    print (k,v)
end
Run Code Online (Sandbox Code Playgroud)

k将保存变量名称,并v保存该值,以便您可以type(v)用来检查变量是否为表.

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