Lua: попытка индексировать поле '?'(нулевое значение) - PullRequest
0 голосов
/ 28 августа 2011

Я только начинаю с 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.

После запуска, что Алекс разместил здесь, результат:

widgets=

table: 0A45CF28

1

WidgetCommon (09590790)

Является ли таблица: 0A ... ответ, который я ищу?

L.E. 2: Переставил всю функцию, так как кажется, что именно в этом и заключается проблема

Ответы [ 3 ]

1 голос
/ 28 августа 2011

Что page:getWidgets возвращается?Вы можете проверить это с помощью print(type(widgets)).Если это таблица, то позиция массива 1 в этой таблице не определена (вы можете просмотреть содержимое таблицы, используя функцию pairs).Если это не таблица, то вы пытаетесь найти индекс для чего-то, что не является таблицей, что не будет работать.

Кроме того, поскольку вы новичок в Lua, поймите, что page:getWidgets не является встроенным компонентом.Поэтому вам необходимо загрузить эту функцию или использовать соответствующее производное приложение, которое предоставляет эту функцию.

0 голосов
/ 30 августа 2011

Это кажется маловероятным, но возможно (и на самом деле похоже на единственную возможность из информации, которую вы опубликовали), что используемая вами библиотека выдает ошибку, а не ваш код. Имейте в виду, что когда выдается ошибка в 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]: ?

У вас есть трассировка стека, чтобы показать, а также ошибка?

0 голосов
/ 28 августа 2011

Попробуйте запустить следующий код:

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) не возвращает список виджетов, как вы ожидаете.

...