LUA变量作为表键

3

我创建并填充了一个表格:

table.insert(logTable,{[probeName] =“日志文本”}

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

我认为lua将其解释为整数而不是字符串?


请参阅对http://stackoverflow.com/questions/11359227/lua-table-addressing/11360021#11360021的回答。 - Ilmo Euro
2个回答

4

{[probeName] = "日志文本"}将创建一个由变量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将包含一堆整数索引的表条目,每个表条目都有一个单一的值(log text),其由某个值(probeName)键控。使用ipairs进行迭代。如果您希望按探针名称累积所有日志到一个表中,则需要执行诸如 logTable[probeName] = "log text" 的操作,这实际上更简单。使用pairs进行迭代。
希望这可以帮到您。

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

3
你要找的函数恰如其名叫做tostring - Nicol Bolas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接