从lua表填充iup列表

时间:2019-01-06 12:59:58

标签: lua iup

我正在构建一组IUP对话框“帮助器”功能-可以在Lua代码中包括的样板,以一致的方式快速实现常用的接口功能。

我有一个函数可以创建带有回调的“标准” iup列表:

conda activate deep
jupyter lab

,但是我现在想增强它,以选择使用静态值列表填充它,以便我可以调用例如函数规范为function MakeList(funcSelect) return iup.list{ valuechanged_cb = function(self) funcSelect() end, sort = "YES", dropdown = "YES", editbox = "NO", expand = "YES", visibleitems = "5"} end 的{​​{1}}并返回填充的列表(如果值表表示为

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"}

但是会跳过以下行为:Lua unpack() messing arguments,因此仅将表中的第一项添加到列表中。

我也尝试过

myList.APPENDITEM

那行得通,但是有没有更整洁的方法呢?

我想先解决填充问题,然后再处理值列表的可选性。

环境是带有compat-5.3模块的Lua 5.1。

1 个答案:

答案 0 :(得分:0)

万一它对任何人都有帮助,我最后要做的是(为索引列表和非索引列表提供服务):

    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