Lua 五三 |
|
此处提供 5.2 和 5.3 之间差异的摘要
公告
wiki 上还描述了受影响的区域,包括
string.dump https://lua.ac.cn/work/doc/manual.html#pdf-string.dump strip 可用于 LuaCompilerInLua,之前在 LuaJit 中。
本页可能涉及的其他领域:LuaJIT?以及 LuaImplementations?IDE 支持?
table.move (a1, f, e, t [,a2]) https://lua.ac.cn/work/doc/manual.html#pdf-table.move
此新函数复制了一系列值。
从设计上讲,此函数与 C memmove [1] 函数有些相似,但并非基于它实现。源范围和目标范围可以重叠(与 C memcpy 不同)。
table.move 还提供了一种方便的方法来清除数组(全部或部分)。
table.move(a, #a+1, 2*#a, 1)
table.move 在 5.3.0(alpha) 版本之前被称为 table.copy。
table.move 在内部使用 lua_geti/lua_seti [2][3] 实现,或者(如果 t 缺少 __index/__newindex 元方法)使用 lua_rawgeti/lua_rawseti [4]/[5] 实现。(参见 ltablib.c 中的 checktab/aux_getn 和 tmove。)
void lua_rotate (lua_State *L, int idx, int n); https://lua.ac.cn/manual/5.3/manual.html#lua_rotate
讨论
观察 lua.h 中 lua_insert 和 lua_remove 的定义,它们基于 lua_rotate。
#define lua_insert(L,idx) lua_rotate(L, (idx), 1) #define lua_remove(L,idx) (lua_rotate(L, (idx), -1), lua_pop(L, 1))
自述文件说“arg 表对所有代码可用”。
讨论
讨论