「hmLJ・LuaJIT」の例題 リスト(テーブル)との値のやり取り

  • 概要

    LuaJITの例題のひとつとなります。

    リストやタプルと添え字アクセス

    リストやタプルへののアクセス関数を確かめてみましょう。

    #L = loaddll( hidemarudir + "\\" + "hmLJ.dll" );
    
    #_ = dllfunc(#L, "DoString", "" +
    "ary = {1, 2, 3}\n" +
    "ary2 = {unpack(ary)}\n" // iタイプのシャロウコピー
    );
    
    #target = dllfunc(#L, "GetNumItemOfList", "ary2", 2);  // ary2[2]を数値として取得ということ
    
    message(str(#target));
    
    #_ = dllfunc(#L, "SetStrItemOfList", "ary2", 2, "abc");  // ary2[2] = "abc"ということ
    
    #ary2len = dllfunc(#L, "GetLenOfList", "ary2");
    
    message("以下配列の中身を順々に表示");
    ##i = 1; // Luaの配列は1からスタート
    while(##i <= #ary2len ) {
      $$elem = dllfuncstr(#L, "GetStrItemOfList", "ary2", ##i);
      message($$elem);
      ##i = ##i + 1;
    }
    
    freedll( #L );
    
    

    整数での添え字が可能なことの意味

    テーブル本体ではなく、テーブルにくっ付けてあるメタテーブルにも対象となります。

    次のようなマクロや関数の使い方も問題なく成立します。

    #L = loaddll( hidemarudir + "\\" + "hmLJ.dll" );
    
    #_ = dllfunc(#L, "DoString", "" +
        "aaa = {a = 3, b = 5, c = 8}\n" +
        "setmetatable(aaa, { __index = { d = 1000, e = 3000 } } )\n"
    );
    
    ##elem = dllfunc(#L, "GetNumItemOfDict", "aaa", "e"); // aaa.e を数値として取得
    
    message(str(##elem));
    
    freedll( #L );