从 Lua 表中填充 iup 列表
2019-1-6 12:59:58
收藏:0
阅读:166
评论:1
我正在建立一组 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() messing arguments,因此只有表中的第一项被添加到列表中。
我也尝试过
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 模块。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

在这里只是为帮助大家,我最终做的是(适用于索引和非索引列表):
local function PopulateList(l, tblVals) local is_indexed = (rawget( tblVals, 1 ) ~= nil) if not is_indexed then local i=1 for k, _ in pairs(tblVals) do l[tostring(i)]=k i=i+1 end else for i, v in ipairs(tblVals) do l[tostring(i)]=v end end end