是否可以查看字符串是否与表名相同?
例如:我知道存在一个名为“ 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的过程中,我只是出于好玩而已。
如果要遍历所有全局变量,可以使用for
循环遍历存储它们的特殊_G
表:
for key, value in pairs(_G) do
print(key, value)
end
key
将保存变量名称。您可以使用type(value)
检查变量是否为表。
要回答您的原始问题,您可以使用_G[varName]
按名称获取全局变量。因此,type(_G["os"])
将为"table"
。
interjay提供了实际执行此操作的最佳方法。不过,如果您有兴趣,可以在lua manual中找到有关原始问题的信息。基本上,您需要:
mystr = "os"
f = loadstring("return " .. mystr);
print(type(f()))
loadstring创建一个包含字符串中代码的函数。运行f()将执行该函数,在这种情况下,该函数仅返回字符串mystr中的任何内容。