1

C++ から Lua 関数を呼び出すと、奇妙な問題が発生します。私はLuaに持っています:

Player = 
{
    Number = 0.43,
    Text = "SomeText",
}

function Player:Func(a, b)  
    return (a * b);
end

lua_pcall の前に、私のスタックは次のように見えます:
テーブル
関数
3
4

この関数を次のように呼び出します:

lua_pcall(L, 2, 1, 0)

そして、Luaからエラーが発生します:

ローカル 'b' (nil 値) で算術を実行しようとします

Luaスクリプトで変更すると

return (a * b);

return a;

エラーはありませんが、lua_tonumber(L, -1); からです。値 4 (C:/ の 2 番目の引数) を取得したので、C の 2 番目の引数が Lua の最初にあるように見えます。私のコードで何が間違っていたか知っていますか?
スタックの構築方法:

lua_getglobal (L, "Player");
lua_pushstring(L, "Func");
lua_gettable(L, -2);
lua_pushnumber(L, 3.0);
lua_pushnumber(L, 4.0);
4

1 に答える 1

3

ベンのコメントが鍵です-150ページの「Luaでのプログラミング」のオブジェクト指向プログラミングのセクションを読んでください。

http://www.lua.org/pil/16.html

コロンの効果は、メソッド定義に追加の非表示パラメーターを追加し、メソッド呼び出しに追加の引数を追加することです。

したがって、最初のパラメータとして「Account」オブジェクトをプッシュするか、(この場合はより簡単に)次のように変更する必要がありますfunction Player:Func(a, b)function Player.Func(a, b)

于 2012-05-27T21:35:24.937 に答える