7

luaから呼び出されるac関数があります。最初のパラメーターはテーブルです。そのテーブルは、基になる API への数値の入力配列として悪用されます。だから今私のコードは次のようになります:

int n = 0;
lua_pushnil ( L );
while ( lua_next ( L, 2 ) ) {
   n++;
   lua_pop ( L, 1 );
}
int *flat = alloca ( n * 4 );
lua_pushnil ( L );
int i = 0;
while ( lua_next(L,2) ) {
   flat[i++] = (int)lua_tonumber( L, -1 ); 
   lua_pop ( L, 1 );
}

コードをブラインドで入力したので、エラーを許してください。また、エラーチェックもありません。しかし問題は、while ループを 2 回実行しなければならないことです。それを回避する簡単な方法はありますか?入力が適切な場合 (int のテーブル) に合わせて最適化したい。

4

1 に答える 1

12

探している関数は直感的ではないという名前lua_objlenの 、または Lua 5.2 ですlua_len(メタメソッドのlua_rawlen呼び出しを避けたい場合は があります)。これは多くの役割を果たします (ただし、文字列の長さなど、文字列とその長さを取得するために使用できる場合はあまり役に立たないものもありlua_tolstringます) ので、よく知っておく必要があります。

于 2012-09-27T08:47:40.507 に答える