1

私が探しているのは次のようなものです:

ルアスクリプト

MY_ARRAY = {
00, 10, 54, 32,
12, 31, 55, 43,
34, 65, 76, 34,
53, 78, 34, 93
}

cコード

lua_Number array[] = lua_getarray("MY_ARRAY");

これは可能ですか?C で lua テーブルを扱いやすくするために似たようなものはありますか?

4

1 に答える 1

4

そのような関数を自分で書くことができます! 行数が多すぎてはいけません。ただし、ポインターは任意の数の要素を指すことができるため、配列よりもポインターを使用することをお勧めします。インターフェイスは次のようになります。

lua_Number *values;
size_t nvalues;
values = luaGetNumbers("MY_ARRAY", &nvalues);
/* the number of values is now nvalues */
for (int i=0; i<nvalues; i++) {
     /* do something with values[i] */
}
free(values);

また、実装では次の関数を使用する必要があります ( http://www.lua.org/manual/5.2/manual.htmlから):

void lua_getglobal (lua_State *L, const char *name);

グローバル名の値をスタックにプッシュします。


void lua_gettable (lua_State *L, int index);

値 t[k] をスタックにプッシュします。ここで、t は指定された有効なインデックスの値であり、k はスタックの一番上の値です。

この関数はスタックからキーをポップし、結果の値をその場所に置きます)。Lua と同様に、この関数は "index" イベントのメタメソッドをトリガーする場合があります (§2.4 を参照)。


lua_Number lua_tonumberx (lua_State *L, int index, int *isnum);

指定された受け入れ可能なインデックスの Lua 値を C 型 lua_Number (lua_Number を参照) に変換します。Lua の値は、数値または数値に変換可能な文字列でなければなりません (§3.4.2 を参照)。それ以外の場合、lua_tonumberx は 0 を返します。

isnum が NULL でない場合、その参照対象には、操作が成功したかどうかを示すブール値が割り当てられます。


void lua_len (lua_State *L, int index);

指定された受け入れ可能なインデックスの値の「長さ」を返します。これは、Lua の「#」演算子と同等です (§3.4.6 を参照)。結果はスタックにプッシュされます。

于 2012-07-26T05:53:33.203 に答える