2017-09-05 25 views
1
  1. Luaの関数を呼び出す++のlua関数の戻り値2番号
  2. C:fooの
  3. 私はそれが関数foo(lua_pop(L、2);)の戻り値をポップする入用のかどうかわかりません。
  4. 私はそれを行う方法と理由を教えてください。どうもありがとう。このよう

部品コード:cはlua関数を呼び出し、戻り値はスタックにあります。

// lua function 
function foo(a, b) 
    return a+b, a-b; 
end 

// c++ 

lua_getglobal(L,"foo"); // push function 
lua_pushnumber(L,1); // push argument 1 
lua_pushnumber(L,2); // push argument 2 

error=lua_pcall(L, 2, 2, 0); 

if (!error) { 
    printf("return:%s\n",lua_tostring(L,-1)); 
    printf("return:%s\n",lua_tostring(L,-2)); 
    // is this needful 
    lua_pop(L,2); 
} 

答えて

1

あなたはいつもあなたが同じlua_Stateを使用してより多くの機能を呼び出す場合には、既知の状態でスタックを試してみておく必要があります。スタックに結果を残して呼び出しを増やすと、最終的に使用可能なスタックスペースがいっぱいになります。

はい、値を使用した後、スタックから2つの結果をポップする必要があります。

+1

また、エラーが発生した場合は、エラーオブジェクト – moteus

+0

を実際にポップする必要があります。あなたが怠け者であれば、lua_pop(l、lua_gettop(l))は残りのすべてのエントリをスタックからポップします。 –

+0

'lua_settop(L、0)'はスタックをクリアするのにもっと慣れているようです – Adam

関連する問題