3

Lua をスクリプト言語として使用する C++ で書かれたプロジェクトに取り組んでいます。デバッグを容易にするために、Lua コードを受信して​​実行し、戻り値を Json にエンコードして、その文字列を送り返すネットワーク デバッガーを実装しました。

私はテーブルにそれを実装することができましたが、今はユーザーデータに格納されている変数にこだわっています。たとえば、次の Lua コードがあります。

Elements.Avatar.testVar = 5

Elements.testVar = 15

return Elements    

// result
{
  "result0": "{Application:userdata; Avatar:userdata; Physics:userdata; testVar:15; }"
}

ApplicationAvatarおよびPhysicsC++ で作成されたオブジェクトです。ただし、この 2 つtestVarsは上記のスクリプトで作成されています。 Elementsはテーブルなので、すべての要素を一覧表示できますが、 が でAvatar.testVarあるため非表示になっているようAvatarですLUA_TUSERDATA

Lua のユーザーデータに追加された変数を検出する方法を知っている人はいますか?

4

1 に答える 1

2

「ユーザーデータに格納された変数」のようなものはありません。少なくとも、Lua に関する限りではありません。Lua の観点からは、ユーザーデータは巨大なブラック ボックスです。文字列と新しい値を指定してメタメソッドをAvatar.testVar = 5呼び出すだけです。C++ メタメソッド (ユーザーデータにメタメソッドを配置できるのは C++ コードのみであるため) がこれをどのように解釈するかは、完全にコード次第です。__newindexAvatartestVar15

そのため、Lua からは実行できません。コードでデバッグ フックを提供する必要があります。Lua 5.2 では、 and関数が値を反復処理するために使用できる__pairsand__ipairsメタメソッドを実装できます。それ以外では、ユーザーデータに存在するものと存在しないものを照会するのは自分です。pairsipairs

于 2013-07-27T21:07:14.990 に答える