Lua:是否尝试索引字段'';(零值)

Lua:是否尝试索引字段'';(零值),lua,null,Lua,Null,我只是从lua开始,我有一些代码,来自一些故意出错的人。现在,我遇到了一个障碍,使以下代码出现此错误: function SIM_Utils:ClickButton(app, buttonName) page = app:getTopPage() widgets = page:getWidgets(buttonName) print (type(widgets)) print (widgets[1]) widgets

我只是从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
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
这将导致:

table
WidgetCommon (09590790)
L.E

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

widgets=

table: 0A45CF28

1

WidgetCommon (09590790)
是表:0A。。。我在寻找的答案是什么


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

什么是
page:getWidgets
返回?您可以使用
打印(键入(小部件))
进行检查。如果是表,则该表中未定义数组位置1(您可以使用
pairs
函数循环浏览表内容)。如果它不是一个表,那么您正试图查找一个非表的索引,这是行不通的


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

尝试运行以下代码:

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
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)
没有像您期望的那样返回小部件列表

这似乎不太可能,但有可能(事实上,从您发布的信息来看,这是唯一可能的)是您正在使用的库抛出了错误,而不是您的代码。请注意,当在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]: ?

你有堆栈回溯来显示错误吗?

答案是table(要打印(键入(widgets)),嗯,我没想到会输出Alex的答案。错误可能来自
单击
代码本身。当然,运行一个
print(type(widgets[1]。click))
并确保它输出:
function
@BMitch:The
print(type(widgets[1]。click))
outputs
function
print(type(page.getWidgets))
还输出
function
我已经添加了整个函数,但是对于类、对象和调用它们,我还没有完全理解。@observ,从您描述的内容来看,问题似乎出在
单击
代码本身。通常,这些错误包括文件名和行号,以帮助您跟踪问题。是的,只有在我陷入困境之前知道如何跟踪错误时才可以:)。