Я использую Lua 5.1 с IUP 3.5 и пытаюсь использовать обратный вызов списка для заполнения списка адресов в зависимости от выбранного места. (Список - это поле для редактирования, поэтому мне нужно будет со временем разобраться с этим, но сначала давайте разберемся с основами). У меня явно есть фундаментальное недопонимание, как это сделать.
код:
function MakeAnIupBox
--make some more elements here
listPlace = iup.list{}
listPlace.sort = "YES"
listPlace.dropdown = "YES"
--populate the list here
--now handle callbacks
listPlace.action = function(self) PlaceAction(text, item, state) end
end
function PlaceAction(text, item, state)
listAddress.REMOVEITEM = "ALL"
if state == 1 then -- a place has been selected
--code here to populate the Addresses list
end
end
Документация iup описывает обратный вызов действия для списка как
ih: action (текст: строка, элемент, состояние: номер) -> (ret: номер) [в Lua]
Однако, когда я запускаю этот код, я получаю:
- текст - выглядит как метастабильный
- элемент, состояние - оба ноль
Я также пытался кодировать обратный вызов как
function MakeAnIupBox
--make some more elements here
listPlace = iup.list{}
listPlace.sort = "YES"
listPlace.dropdown = "YES"
--populate the list here
end
function listPlace:action (text, item, state)
listAddress.REMOVEITEM = "ALL"
if state == 1 then -- a place has been selected
--code here to populate the Addresses list
end
end
но не запускается: ошибка attempt to index global 'listPlace' (a nil value)
Я бы предпочел не встраивать обратный вызов в «MakeAnIupBox», потому что я надеюсь сделать его (и другие связанные обратные вызовы) компонентом с возможностью повторного использования в нескольких программах Lua, которые обрабатывают одинаковые наборы данных, но из разных интерфейсов.