控制 Lua 中的变量作用域;这将同时改变两个变量。

我不明白为什么 Lua 会更改两个变量,即使我理解函数外的那个变量不应该被改变。

发生了什么事,如何保持“攻击者”变量不变?

谢谢!

local attacker = {0,-1}

local function test()

    local hitPattern = attacker

    print( "----------->> attacker", #attacker )

    --设置循环方法
    if hitPattern[#hitPattern] == -1 then
        hitPattern[#hitPattern] = nil
    end

    print( "----->> attacker", #attacker )

end

test()
----------->> attacker 2
----->> attacker 1
点赞
用户1009479
用户1009479

来自Lua 5.2参考手册

表(table)、函数(function)、线程(thread)和(full)userdata值都是对象:变量并没有实际包含这些值,只有对它们的引用(reference)。赋值、参数传递和函数返回总是操作这些值的引用;这些操作并不意味着任何形式的复制。

因此,当你进行以下赋值操作时:

local hitPattern = attacker

变量 hitPatternattacker 都引用相同的表格(table),当你修改其中一个时,另一个也会改变。

2014-05-21 10:45:14