2

レベルエディターでLuaファイルを読み取り、ユーザーが編集できるようにデータを視覚的な形式で表示できるようにしたいと思います。

私がそのようなLuaテーブルを持っている場合:

properties = {
  Speed = 10,
  TurnSpeed = 5
}

Speed明らかに鍵と10価値です。そのようなキーを知っていれば、値にアクセスできることはわかっています(テーブルがすでにスタック上にある場合)。

lua_pushstring(L, "Speed");
lua_gettable(L, idx); 
int Speed = lua_tointeger(L, -1);
lua_pop(L, 1); 

私がやりたいのは、C++でキーの名前と対応する値にアクセスすることです。これはできますか?もしそうなら、どうすればそれについて行くことができますか?

4

1 に答える 1

4

これは、テーブルの要素を反復処理するlua_next関数でカバーされています。

// table is in the stack at index 't'
lua_pushnil(L);  // first key
while (lua_next(L, t) != 0)
{
  // uses 'key' (at index -2) and 'value' (at index -1)
  printf("%s - %s\n", luaL_typename(L, -2), luaL_typename(L, -1));
  // removes 'value'; keeps 'key' for next iteration
  lua_pop(L, 1);
}

lua_nextテーブルのキーからキーを外すので、反復している間、それをスタックに保持する必要があります。各呼び出しは、次のキーと値のペアにジャンプします。0が返されると、完了です(キーがポップされている間、次のキーは押されませんでした)。

明らかに、繰り返し処理しているテーブルに要素を追加または削除すると、問題が発生する可能性があります。

于 2012-09-15T21:41:57.253 に答える