Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lua_pop vs lua_remove 目前我在C++中构建了自己的脚本VM管理器类,我对Lua+Lua C或C++的任何一个都没有问题,但是我困惑的一个部分是:何时使用 LuaAupp[b/Cord] >以及何时使用 LuaaAdvestue/Cuff>。p>_C++_C_Lua - Fatal编程技术网

lua_pop vs lua_remove 目前我在C++中构建了自己的脚本VM管理器类,我对Lua+Lua C或C++的任何一个都没有问题,但是我困惑的一个部分是:何时使用 LuaAupp[b/Cord] >以及何时使用 LuaaAdvestue/Cuff>。p>

lua_pop vs lua_remove 目前我在C++中构建了自己的脚本VM管理器类,我对Lua+Lua C或C++的任何一个都没有问题,但是我困惑的一个部分是:何时使用 LuaAupp[b/Cord] >以及何时使用 LuaaAdvestue/Cuff>。p>,c++,c,lua,C++,C,Lua,据我所知,lua_-pop是从上到下删除多个值(堆栈上),消除不再需要的数据,其中aslua_-remove是从任意有效堆栈索引中删除单个值(基本上是lua手册对这两个索引所说的:p) 但我注意到web上分散的ceratin代码段混合了lua_-pop和lua_-remove,但当我尝试使用lua_-pop而不是lua_-remove时,我遇到了问题,那么,是否有可能获得一个明确的例子或解释,说明如何以及何时正确使用这两个功能,以及这两个功能的相关速度和效率(我假设lua\u-pop比lua\u

据我所知,
lua_-pop
是从上到下删除多个值(堆栈上),消除不再需要的数据,其中as
lua_-remove
是从任意有效堆栈索引中删除单个值(基本上是lua手册对这两个索引所说的:p)

但我注意到web上分散的ceratin代码段混合了
lua_-pop
lua_-remove
,但当我尝试使用
lua_-pop
而不是
lua_-remove
时,我遇到了问题,那么,是否有可能获得一个明确的例子或解释,说明如何以及何时正确使用这两个功能,以及这两个功能的相关速度和效率(我假设
lua\u-pop
lua\u-remove
快,这就是我想要尽可能多地使用
lua\u-pop
的原因之一,除了编码“正确的代码”之外)


谢谢:)

lua\u remove的一个典型示例是访问表。来自的片段

lua_getfield将t[x]推到堆栈上。您不再需要t,因此将其删除


lua_pop
的一个典型示例是迭代表

lua_pushnil(L);  /* first key */
while (lua_next(L, t) != 0) {
    /* uses 'key' (at index -2) and 'value' (at index -1) */
    /* do whatever you like with the key and the value */

    lua_pop(L, 1);
}
完成一次迭代后,需要将密钥放在堆栈顶部,以便
lua_next
知道接下来是哪个密钥/值对。您需要删除堆栈顶部的值


这不是一个明确的例子。在Lua,你做任何适合你的事。始终记住lua_状态堆栈上的内容,您就会没事。

它们非常不同
lua_pop
始终从堆栈顶部移除
lua_remove
将从堆栈上的任何对象中删除一个值。如果要从堆栈中删除的值不在顶部,则不能使用
lua\u pop

e、 g


以下C代码完全等效:

lua_pop(L, 1); // same as:
lua_remove(L, -1);
这些也是:

lua_pop(L, n); // same as:
lua_settop(L, lua_gettop(L)-n);

不要担心效率。“编写‘正确的代码’”更为重要。我喜欢让它正确,这样我就可以在它完成时进行优化。只有在您的代码正常工作并且需要明显和可测量的优化之后,才进行优化。没有必要为了炫耀而增加复杂性和更高的维护成本。我同意,我没有时间浪费在浏览生成的程序集上,看看a在哪里可以通过微小的调整获得几个周期(我把它留到我真的很无聊的时候;)),这就是为什么我要问这个问题,尽管我的代码工作得完美无缺,但是完美地工作并不意味着它完全正确,所以,第一点是检查它是否正确,如果任何一种方法都是正确的,检查第二点,即检查使用x func比y func是否有任何好处,如果值得的话,实施它,否则,请在源代码中留下注释,以供将来参考。谢谢。我将再次查看“表”部分,看看这是否有帮助:)
lua_pop(L, 1); // same as:
lua_remove(L, -1);
lua_pop(L, n); // same as:
lua_settop(L, lua_gettop(L)-n);