是否可以查看字符串是否与表名相同?
例如:
我知道存在一个名为'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的过程中的乐趣。
答案 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中的内容。