Я создаю набор вспомогательных функций диалога IUP - шаблон, который я могу включить в свой код Lua для быстрой реализации часто используемых функций интерфейса согласованным образом.
У меня есть функция для создания «стандартного» списка iup с обратным вызовом:
function MakeList(funcSelect)
return iup.list{
valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES", editbox = "NO",
expand = "YES", visibleitems = "5"}
end
, но теперь я хочу дополнить его списком статических значений, чтобы я мог вызвать, например, mylist = MakeList(myFunction, {"X", "B", "Q"})
, где спецификацией функции является function MakeList(funcSelect, tblVals)
, и вернуть заполненный список, если таблица значений дано как (эквивалент)
iup.list{"X", "B", "Q";
valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES", editbox = "NO",
expand = "YES", visibleitems = "5"}
но (в конечном итоге) не заполняется, если таблица значений не указана или пуста - это второй этап проблемы.
Список будет заполнен перед отображением; Я знаю, как это сделать после сопоставления с использованием myList.APPENDITEM
, но для статических списков это не должно быть необходимо (не так ли?)
Я пытался
function MakeStaticList(funcSelect, tblVals)
return iup.list{table.unpack(tblVals);
valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES",
editbox = "NO", expand = "YES", visibleitems = "5"}
end
но это опровергает это поведение: Lua unpack () аргументы сообщения , поэтому в список добавляется только первый элемент таблицы.
Я тоже пробовал
function MakeStaticList(funcSelect, tblVals)
l = iup.list{valuechanged_cb = function(self)
funcSelect()
end,
sort = "YES", dropdown = "YES", editbox = "NO", expand = "YES", visibleitems = "5"}
for i, v in ipairs(tblVals) do
l[tostring(i)]=v
end
return l
end
и это работает, но есть ли более аккуратный способ сделать это?
Я хочу сначала решить проблему с заполнением, а затем перейти к дополнительности таблицы значений.
Среда - Lua 5.1 с модулем compat-5.3.