【发布时间】:2019-07-04 01:46:13
【问题描述】:
我正在向 lua 中的表添加一个字符串。当我在函数中使用表时,原始表正在被更改。我只是一个初学者,但我认为该功能无法做到这一点,因为它超出了它的范围。我有什么明显的遗漏吗?
local testTable= {}
testTable.name = {}
testTable.name[1] = "Jon"
print(testTable.name[1])
local function testFunc(a)
a.name[1] = "Bob"
end
local newTable = testTable
testFunc(newTable)
print(testTable.name[1])
我预计输出是:
Jon
Jon
实际输出为:
Jon
Bob
testFunc如何改变testTable?
【问题讨论】:
-
您将表的引用传递给您的函数
-
不是您要问的,而是:术语“范围”是指您的代码可以访问的变量。在您的示例中,只有函数
testFunc可以访问变量a,因为作为函数的参数,它在函数代码的范围内,但在它之外不存在。从技术上讲,您的函数还可以直接访问 newTable 和 testTable 变量,因为它们是上值(Lua 对闭包环境的术语)。
标签: lua