0

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 です。

4

1 に答える 1