我有一個Lua功能註冊一個希望將元表作爲參數和我要修改的表的內容中C++運行:傳遞參數作爲參考從Lua到C++
int operate(lua_State *L)
{
std::vector<int> values{};
if (auto length = get_length_at_index(L, 1))
{
result.reserve(length);
lua_pushnil(L);
while (lua_next(L, 1))
{
result.push_back(lua_tointeger(L, -1));
lua_pop(L, 1);
}
}
for (auto &v : values)
{
v *= 2;
}
return 0;
}
int main()
{
auto L = luaL_newstate();
luaL_dofile(L, "script.lua");
lua_register(L, "operate", operate);
return 0;
}
上述代碼讀取"lua.script"
,其看起來像這樣:
values = {1, 2, 3, 4, 5, 6}
operate(values)
for index = 1, #values do
print(values[index])
end
預期的輸出是從1到6乘以2的值,但輸出是未修改的值。很明顯,這是因爲我複製 metatable到std::vector
並修改副本。
有過的Lua的方式,它們反映在C++應用更改對象從C++運行時操作的方法嗎? PS:我知道我可以返回表作爲函數的返回值,但我想知道是否還有其他選項。回到頂端這篇文章中的信息適用於:
在任何情況下,您必須在加載使用它的腳本之前在解釋器中註冊該函數。如果沒有'luaL_openlibs(L)',你將無法'打印'。 –