1

LuaInterface でのユーザーデータ型へのアクセスに関して質問があります。C# ディクショナリを Lua に渡し、ipairs を使用してそれを繰り返し処理しようとすると、ipairs はユーザーデータ オブジェクトではなくテーブルを想定しているため、エラーが発生します。

解決策の 1 つは、Dictionary 型を LuaTable 型に変換してから Lua に渡すことだと思いますが、userdata 型を入れたい用途の 1 つは、Dictionary オブジェクトを Lua に取り込み、customType オブジェクトのフィールドを更新することです。 Lua でメソッドを呼び出します。これが可能かどうかはわかりませんが、その Dictionary を文字列と int の LuaTable に変換すると、Lua から customType と直接やり取りする機会が失われることは間違いありません。

Lua でのユーザーデータの操作に関する情報をオンラインで調べましたが、C/C++ を介した Lua とのインターフェイスと、よくわからないスタックを見つけたいくつかの例を見つけました。また、場合によっては sizeof メソッドが使用されますが、これは c# では簡単な代替手段がありません。誰かが私にいくつかの指針を教えてもらえますか? C のユーザー定義型に関する PIL セクションもあまり役に立ちませんでした。

4

1 に答える 1

1

LuaInterface/NLua を使用してコレクション要素を反復処理するには、ipairs の代わりに luanet.each を使用する必要があります。Dictionary から LuaTable を作成する必要はありません。

luanet.each はGetEnumeratorMoveNextとを使用Currentして Dictionary を反復処理します。

関数 luanet.each(o)
   ローカル e = o:GetEnumerator()
   関数を返す()
      e:MoveNext() の場合
        e.Current を返す
     終わり
   終わり
終わり

代わりにfor x in ipairs(dict)使用for x in luanet.each (dict)

参考:https ://github.com/NLua/NLua/blob/079b7966245cccb42c563abeb19290459e10934e/Core/NLua/Lua.cs#L245

于 2013-11-22T16:33:26.857 に答える