【问题标题】:Lua: attempt to index field '?' (a nil value)Lua:尝试索引字段“?” (零值)
【发布时间】:2011-11-05 12:52:42
【问题描述】:

我刚从 lua 开始,我有一些代码,来自一些故意错误的人。现在,对于以下代码,我遇到了不断出现此错误的障碍:

function SIM_Utils:ClickButton(app, buttonName)
        page = app:getTopPage()
        widgets = page:getWidgets(buttonName)
        print (type(widgets))
        print (widgets[1])
        widgets[1]:click(true, 5000)--this yields "attempt to index field '?' (a nil value)"
        widgets[1]:click(false,0)--this yields "attempt to index field '?' (a nil value)"
        app:captureScreen()
end

这将导致:

table
WidgetCommon (09590790)

L.E.

运行 Alex 在此处发布的内容后,结果如下:

widgets=

table: 0A45CF28

1

WidgetCommon (09590790)

是表:0A...我正在寻找的答案?

L.E. 2:重新发布整个功能,因为这似乎是问题所在

【问题讨论】:

    标签: lua null


    【解决方案1】:

    page:getWidgets 返回的是什么?您可以使用print(type(widgets)) 进行检查。如果它是一个表,则数组位置 1 未在该表中定义(您可以使用 pairs 函数循环遍历表内容)。如果它不是表,那么您正在尝试在不是表的东西上查找索引,这是行不通的。

    另外,由于您是 Lua 新手,请注意 page:getWidgets 不是内置组件。因此,您需要加载此功能或使用提供此功能的适当派生应用程序。

    【讨论】:

    • 答案是 table (to print(type(widgets)) )
    • 嗯,我没想到输出会是 Alex 的回答。错误可能来自click 代码本身。可以肯定的是,运行print(type(widgets[1].click)) 并确保它输出:function
    • @BMitch: print(type(widgets[1].click)) 输出 function print(type(page.getWidgets)) 也输出 function 我已经添加了整个函数,但是对于类、对象和调用它们,我还没有完全理解.
    • @observ,根据您的描述,问题似乎出在click 代码本身。通常,这些错误包括文件名和行号,以帮助您追踪问题。
    • 是的,只有在我陷入这个混乱之前我知道如何追踪错误:)。
    【解决方案2】:

    尝试运行以下代码:

    widgets = page:getWidgets(buttonName) 
    print("widgets=", widgets) -- Should print out something like "Widgets= 0x12345678". If it doesn't then widgets is nil. In other words nothing is there. 
    for k, v in pairs(widgets) do
        print(k, v)
    end
    

    这将确保您确保您有一个widgets 表,如果您这样做了,它会告诉您其中有什么。如果您在索引 1 处没有任何内容,那么这就是您的问题:page:getWidgets(buttonName) 没有像您期望的那样返回小部件列表。

    【讨论】:

      【解决方案3】:

      这似乎不太可能,但有可能(事实上,从您发布的信息来看,这似乎是唯一的可能性)您正在使用的库抛出错误,而不是您的代码。请注意,当 Lua 中抛出错误时,抛出代码并告诉 Lua 将错误显示为从您的调用代码中抛出,而不是在库代码中。这应该只用于逻辑错误,如“Widget::show 的错误参数”,而不是像你得到的那样,但它可能会发生。此外,C 函数中的错误会显示出来,就像它来自您的代码一样。例如:

      io.open("myFile").read() --> should be ":read", not ".read"
      stdin:1: attempt to index a nil value
      stack traceback:
          stdin:1: in main chunk
          [C]: ?
      

      您是否有要显示的堆栈回溯以及错误?

      【讨论】:

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