「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 );

PICTURE

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

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

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

#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 );

PICTURE