lua_rotate 是做什么的?

what does lua_rotate do?

Lua5.3引入了一个新的c api lua_rotate: https://www.lua.org/manual/5.3/manual.html#lua_rotate

Rotates the stack elements between the valid index idx and the top of the stack. The elements are rotated n positions in the direction of the top, for a positive n, or -n positions in the direction of the bottom, for a negative n. The absolute value of n must not be greater than the size of the slice being rotated.

无法理解lua_rotate的工作原理,尤其是上面的粗体字,需要帮助!

堆栈基本上是一个数组,按明确定义的顺序排列的线性元素序列。假设我们有一个字符数组如下(基于 1 的索引在元素上方):

1 2 3 4 5 6 
A Q Z G N K

"Rotation" 是计算机科学中对元素序列的常见操作,很像 "shifting" 或 "sorting" 等等(这就是为什么 Lua 手册不不必费心去详细说明 "rotate" 元素的含义)。将此数组向左或向右旋转某个数字 N 意味着将所有元素 left/right 移动 N 个元素,并将元素移出数组的末尾在新的空白部分,按顺序排列。

因此,如果我们将上述数组右旋 2,您将得到以下结果:

1 2 3 4 5 6
N K A Q Z G

原来的1-4号元素变成了3-6号元素,原来的5-6号元素在新版中变成了1-2号元素。左旋转的工作方式类似。

旋转数组的一部分仅仅意味着做这个操作,而对数组的其他部分不做任何处理。因此,如果你采用上面的原始数组,并向左旋转 3 个元素,但只影响元素 3-6,你会得到以下结果:

1 2 3 4 5 6
A Q K Z G N