Currently I’m building my own script VM manager class in C++. I have no problems with any of the Lua & Lua C or C++ stuff, but the one section that confuses me is when to use lua_pop and when to use lua_remove.
From what I understand, lua_pop is to remove multiple values(on the stack) from the top down, eliminating data that is no longer needed, where as lua_remove is for removing a single value from any arbitrary, valid stack index (basically what the Lua manual says for both :P).
But I’ve noticed certain segments of code scattered around the web that intermix lua_pop and lua_remove, but when I tried to use lua_pop instead of lua_remove where the call just removed the top stack element, I ran into problems. So would it be possible to get a definitive example or explanation on how and when to use these two functions correctly, as well as relative speed & efficiency for these two? I assume lua_pop is faster than lua_remove, which is one of the reasons why I want to use lua_pop as much as possible, apart from coding ‘correct code’.
A typical example of
lua_removeis accessing tables. Snippets from Lua reference manual.lua_getfield pushes t[x] on the stack. You no longer need t, so you remove it.
A typical example of
lua_popis iterating over a table.After you are done with a single iteration, you need to have the key on top of the stack, so that
lua_nextknows which key/value pair comes next. You need to remove the value, which is on top of the stack.It’s not a definitive example. In Lua you do whatever works for you. Always keep in mind what’s on your lua_State stack, and you’ll be fine.