gpt4 book ai didi

variables - 多重分配如何运作?

转载 作者:行者123 更新时间:2023-12-04 17:23:42 25 4
gpt4 key购买 nike

来自 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' fory'



任务实际上如何工作?

最佳答案

如何实现多重赋值取决于您使用的 Lua 实现。只要它保留语义,实现就可以自由地做任何它喜欢的事情。也就是说,无论事情如何实现,您都应该得到相同的结果,就像在将它们分配给 LHS 之前将所有值保存在 RHS 中一样,正如 Lua 书籍所解释的那样。

如果您仍然对实际实现感到好奇,您可以做的一件事就是查看为某个程序生成的字节码是什么。例如,采取以下程序

local x,y = 10, 11
x,y = y,x

并将其传递给 Lua 5.2 的字节码编译器( 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

MOVE 操作码将右寄存器中的值分配给左寄存器(有关详细信息,请参阅 Lua 源代码中的 lopcodes.h)。显然,正在发生的事情是寄存器 0 和 1 被用于 xy并且插槽 2 被用作临时额外插槽。 xy在前两个操作码中使用常量进行初始化,在接下来的三个 3 操作码中使用“临时”第二个插槽执行交换,有点像您手动执行的操作:
tmp = y -- MOVE 2 1
y = x -- MOVE 1 0
x = tmp -- MOVE 0 2

考虑到 Lua 在进行交换赋值和静态初始化时如何使用不同的方法,如果你对不同类型的多重赋值得到不同的结果,我不会感到惊讶(设置表字段可能看起来非常不同,特别是从那时起由于元方法,顺序应该很重要......)。不过,我们需要在源代码中找到字节码被发出的部分,以便 100% 确定。正如我之前提到的,所有这些都可能因 Lua 版本和实现而异,特别是如果您查看 LuaJIT 与 PUC Lua。

关于variables - 多重分配如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15256516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com