【问题标题】:"attempt to index a nil value (field '?')"“尝试索引一个零值(字段'?')”
【发布时间】:2020-10-14 17:03:42
【问题描述】:

我做错了什么,我知道表格中的nil 有问题,但是:

local did = gwaExtractFromTopic(2)
local measurementId = gwaData.id
local newMessage = gwaData.value
local topic = gwaExtractFromTopic(2)


if did ~= nil and measurementId ~= nil then
    table[did][measurementId] = newMessage
end

我得到的代码还在attempt to index a nil value (field '?')

编辑:我已经更改了源代码,但还是不行:

local measurements[did] = {}

if did and measurementId and tab[did] then
    measurements[did][measurementId] = newMessage
end

【问题讨论】:

  • table 是 Lua 中的“容器”类型,保留
  • 更改了名称,我看到了同样的问题
  • 试试看if did and measurementId and tab[did] then ... - tab[did] 必须存在
  • @Mike V,不,table 只是一个全局变量,可以被覆盖 (lua.org/manual/5.1/manual.html#2.1)。
  • @Mike V,正确:在分配table[did][measurementId] 之前,您应该将table[did] 分配给一个表。在这完成之前,table[did] 为零。 @Mike V 应该将此作为答案发布。

标签: lua


【解决方案1】:
local measurements[did] = {}

measurements[did] 索引表measurements 中的did 字段

您不能将表达式用作变量名。此外,由于提供的代码中的测量值为零,因此索引零值时会出错。

试试这样的:

local measurements = {}

if did and measurementId then
  measurements[did] = {}
  measurements[did][measurementId] = newMessage
end

【讨论】:

    猜你喜欢
    • 2021-05-15
    • 1970-01-01
    • 2016-09-19
    • 2012-03-12
    • 2020-05-28
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多