我正在构建一组 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"}
但是(最终)如果值表未指定或为空,则不会填充 - 这是问题的第 2 阶段。
该列表将在映射之前填充;我知道如何在映射后使用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
这行得通,但是有没有更简洁的方法呢?
我想先解决填充问题,然后再讨论值表的可选性。
环境是带有 compat-5.3 模块的 Lua 5.1。