I'm trying to "call" a function from a table
written in Lua
. The problem is that I am not able to pass three arguments to this function.
When I pass the arguments, it is as if the Lua
skips the first argument and continues from the second onwards. Down a snippet of code.
// C++
// Função responsável por chamar a função do script
int CPP_get(lua_State* ls)
{
lua_getfield(ls, LUA_GLOBALSINDEX, "vec"); // Coloca vec na pilha
lua_getfield(ls, -1, "func"); // coloca a função func na pilha
lua_remove(ls, -2); // Remove vec da pilha
dumpStack(ls); // Mostra a pilha
lua_pushnumber(ls, 2.0f); // Primeiro argumento
lua_pushnumber(ls, 4.0f); // Segundo argumento
lua_pushnumber(ls, 8.0f); // Terceiro argumento
dumpStack(ls); // Mostra a pilha
std::cout << "\n";
lua_pcall(ls, 3, 1, 0); // Chama a função
return 1;
}
-- Lua
-- Table
vec = {}
vec.__index = vec
-- Função a ser chamada
function vec:func(x, y, z)
print("vec:func:", x, y, z)
return "return: OK"
end
-- Chamando a função
print("CPP.get:", CPP.get())
The dumpStack
function is to show the elements of the current "stack". Below is a print of how the "stack" is. At the end of the run it only goes from the second argument onwards.