2011-03-09 46 views
8

是否可以查看字符串是否與表名相同?使用type()函數查看當前字符串是否存在,如表

例如: 我知道一個名爲'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的過程中爲了好玩而做這些。

回答

14

如果要遍歷所有的全局變量,你可以使用一個for循環遍歷_G表它們存儲:

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

k將持有的變量名,v將持有的價值,因此您可以使用type(v)來檢查變量是否爲表格。

要回答你的原問題,你可以通過_G[varName]的名字得到一個全局變量。所以type(_G["os"])會給"table"

+0

真棒,非常感謝。知道必須有一個簡單的方法來做到這一點:) – Michelrandahl 2011-03-09 18:48:19

3

interjay給出了最好的方法來實際做到這一點。如果你有興趣,但你的原始問題的信息可以在lua manual找到。基本上,你想要:

mystr = "os" 

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

print(type(f())) 

loadstring創建一個函數,包含字符串中的代碼。運行f()會執行該函數,在這種情況下,它只返回字符串mystr中的任何內容。

相關問題