Lua:尝试索引字段'?' (零值)

时间:2011-08-28 16:29:01

标签: lua null

我刚开始使用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:重新发布整个函数,因为它似乎是问题所在的地方

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

尝试运行以下代码:

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

答案 2 :(得分:0)

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

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]: ?

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