作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
来自 Section 4.1 of Programming in Lua .
In a multiple assignment, Lua first evaluates all values and only then executes the assignments. Therefore, we can use a multiple assignment to swap two values, as in
x, y = y, x -- swap
x' for
y'
最佳答案
如何实现多重赋值取决于您使用的 Lua 实现。只要它保留语义,实现就可以自由地做任何它喜欢的事情。也就是说,无论事情如何实现,您都应该得到相同的结果,就像在将它们分配给 LHS 之前将所有值保存在 RHS 中一样,正如 Lua 书籍所解释的那样。
如果您仍然对实际实现感到好奇,您可以做的一件事就是查看为某个程序生成的字节码是什么。例如,采取以下程序
local x,y = 10, 11
x,y = y,x
luac -l
)给出
main <lop.lua:0,0> (6 instructions at 0x9b36b50)
0+ params, 3 slots, 1 upvalue, 2 locals, 2 constants, 0 functions
1 [1] LOADK 0 -1 ; 10
2 [1] LOADK 1 -2 ; 11
3 [2] MOVE 2 1
4 [2] MOVE 1 0
5 [2] MOVE 0 2
6 [2] RETURN 0 1
x
和
y
并且插槽 2 被用作临时额外插槽。
x
和
y
在前两个操作码中使用常量进行初始化,在接下来的三个 3 操作码中使用“临时”第二个插槽执行交换,有点像您手动执行的操作:
tmp = y -- MOVE 2 1
y = x -- MOVE 1 0
x = tmp -- MOVE 0 2
关于variables - 多重分配如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15256516/
我是一名优秀的程序员,十分优秀!