2012-07-06 59 views
1

我創建並填充表:LUA變量如表鍵

table.insert(logTable,{[probeName] =「日誌文本」}

是正確的方式在使用變量[關鍵]部分?

我想Lua是interprating這是一個整數,而不是字符串?

+0

另請參閱http://stackoverflow.com/questions/11359227/lua-table-addressing/11360021#11360021 – 2012-07-06 10:01:39

回答

1

如果probeName是一個數字,Lua的將它解釋爲這樣的,但它不會轉換包含數字的字符串到一個數字。如果它是一個數字,並且您想將其轉換爲字符串,則可以使用強制(["" .. probeName])或字符串格式([string.format("%d", probeName)])。

+3

的答案您正在查找的函數恰當地命名爲'tostring'。 – 2012-07-06 15:56:56

2

{[probeName] =「log text」}將創建一個由變量probeName的值索引的文字表。所以它將取決於該值的類型。這可能是一個整數,或者一個字符串或函數或表格等

所以:

probeName = 'abc' 
for k, v in pairs({ [probeName] = "log text" }) do print(type(k), k, v) end 
probeName = 123 
for k, v in pairs({ [probeName] = "log text" }) do print(type(k), k, v) end 
probeName = { 'another table' } 
for k, v in pairs({ [probeName] = "log text" }) do print(type(k), k, v) end 

生成輸出:

string abc log text 
number 123 log text 
table table: 0xfa6050 log text 

現在,table.insert(logTable,{ [probeName] =「log text」}實際上會接受該文字表並將其插入另一個帶有整數索引的表(logTable),因此logTable將包含一堆整數索引的表項,每個表都有一個值文本),這是由一些價值鍵(親取名)。用ipairs迭代它。相反,如果您希望通過探針名稱將所有日誌累積到一個表格中,則需要執行如下操作:logTable [probeName] =「log text」這實際上更簡單。用迭代它。

希望這會有所幫助。