Lua:尝试索引字段“?”(值为nil)

我刚开始学习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)

table: 0A...这是我正在寻找的答案吗?

L.E. 2:重贴整个函数,因为似乎问题导致函数出错。

原文链接 https://stackoverflow.com/questions/7222187

点赞
stackoverflow用户596285
stackoverflow用户596285

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

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

2011-08-28 17:31:30
stackoverflow用户63791
stackoverflow用户63791

尝试运行以下代码:

widgets = page:getWidgets(buttonName)
print("widgets=", widgets) -- 应该打印出类似于 "Widgets= 0x12345678" 的内容。如果没有,则表明 widgets 为 nil,也就是什么都没有。
for k, v in pairs(widgets) do
    print(k, v)
end

这将确保您拥有一个 widgets 表,如果有的话,它将告诉您其中包含的内容。如果您在索引为 1 的位置上没有任何东西,那么问题就出在这里:page:getWidgets(buttonName) 并没有像您期望的那样返回一个小部件列表。

2011-08-28 17:35:03
stackoverflow用户450259
stackoverflow用户450259

似乎不太可能,但是有可能(确切的说,从您发布的信息来看,这似乎是唯一的可能性)是您使用的库抛出了错误,而不是您的代码。请注意,当 Lua 中抛出错误时,抛出错误的代码可以告诉 Lua 显示错误是由您调用的代码引起的,而非库代码。这只应用于像“Widget::show 的错误参数”这样的逻辑错误,而不是像您遇到的情况。但这是有可能发生的。此外,在 C 函数中的错误会显示出类似于它来自您的代码的效果。例如:

io.open("myFile").read() --> 应该是 ":read",而不是 ".read"
stdin:1: attempt to index a nil value
stack traceback:
    stdin:1: in main chunk
    [C]: ?

您是否有堆栈回溯信息来显示错误?

2011-08-29 20:16:59