LUA变量作为表键

时间:2012-07-06 09:42:11

标签: lua

我创建并填充表格:

table.insert(logTable,{[probeName] =“log text”}

这是在[key]部分使用变量的正确方法吗?

我认为lua是将整数而不是字符串插入?

2 个答案:

答案 0 :(得分:3)

{[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将包含一堆整数索引表条目,每个条目都有一个值(日志文本),该值由某个值(probeName)键入。用 ipairs 对其进行迭代。如果您希望累积所有值通过探针名称将日志记录到一个表中,您需要执行类似 logTable [probeName] =“log text”的操作,这实际上更简单。使用进行迭代。< / p>

希望这有帮助。

答案 1 :(得分:1)

如果probeName是一个数字,Lua会将其解释为,但不会将包含数字的字符串转换为数字。如果它是一个数字并且您想将其转换为字符串,则可以使用强制(["" .. probeName])或字符串格式([string.format("%d", probeName)])。