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

问题描述 投票:11回答:2

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

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

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

当然,此示例无法像我想要的那样工作,因为

type(x)

将仅返回“字符串”。

之所以这样做,只是因为我想列出所有现有的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的过程中,我只是出于好玩而已。

lua
2个回答
17
投票

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

for key, value in pairs(_G) do
    print(key, value)
end

key将保存变量名称。您可以使用type(value)检查变量是否为表。

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


4
投票

interjay提供了实际执行此操作的最佳方法。不过,如果您有兴趣,可以在lua manual中找到有关原始问题的信息。基本上,您需要:

mystr = "os"

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

print(type(f()))

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

© www.soinside.com 2019 - 2024. All rights reserved.