如何在Lua中交换变量?

时间:2014-04-11 07:32:25

标签: lua

在下面的代码中,有人可以解释b,a = a,b内部是如何工作的吗?

-- Variable definition:
local a, b
-- Initialization
a = 10
b = 30

print("value of a:", a)

print("value of b:", b)

-- Swapping of variables
b, a = a, b
print("value of a:", a)

print("value of b:", b)

2 个答案:

答案 0 :(得分:10)

考虑Lua脚本:

local a, b
a = 10
b = 30
b, a = a, b

在其上运行luac -l,您就会明白这一点:

    1   [1] LOADNIL     0 1
    2   [2] LOADK       0 -1    ; 10
    3   [3] LOADK       1 -2    ; 30
    4   [4] MOVE        2 0
    5   [4] MOVE        0 1
    6   [4] MOVE        1 2
    7   [4] RETURN      0 1

这些是给定脚本的Lua VM的说明。局部变量分配给寄存器0和1,然后寄存器2用于交换,就像你手动使用临时变量一样。实际上,下面的Lua脚本生成完全相同的VM代码:

local a, b
a = 10
b = 30
local c=a; a=b; b=c

唯一的区别是,如果脚本更长,更复杂,编译器会在第一种情况下重用寄存器2。

答案 1 :(得分:1)

我认为在内部你并不意味着Lua C代码?

基本上,在多次分配中,Lua总是在执行分配之前评估分配右侧的所有表达式。

因此,如果您在分配的两侧使用变量,则可以确定:

local x, y = 5, 10

x, y = doSomeCalc(y), doSomeCalc(x) --x and y retain their original values for both operations, before the assignment is made