【问题标题】:LUA Variables as Table KeysLUA 变量作为表键
【发布时间】:2012-09-11 01:27:32
【问题描述】:

我创建并填充一个表:

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

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

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

【问题讨论】:

标签: lua


【解决方案1】:

{ [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" 之类的操作,这实际上更简单。使用 pairs 对其进行迭代。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您要查找的函数恰如其分地命名为tostring
    猜你喜欢
    • 2018-06-01
    • 2017-01-15
    • 2017-09-20
    • 2021-06-06
    • 1970-01-01
    • 2021-12-11
    • 2012-11-06
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多