Lua是否可以返回对表内部元素的引用?

Lua是否可以返回对表内部元素的引用?,lua,lua-table,Lua,Lua Table,假设我有一个简单的表,这个表中有另一个包含其他值的表。 为简单起见,以下是布局: local a = {b = {X = 123; Y = 321; Z = 456;}}; 我有一个函数,它应该返回对表a.b中给定值的引用 local function GetRef(member) --return a reference to a.b[member] end 我需要调用GetRef的原因是,调用它的另一个函数需要能够为表中提供的值分配一个新值: local function Ass

假设我有一个简单的表,这个表中有另一个包含其他值的表。 为简单起见,以下是布局:

local a = {b = {X = 123; Y = 321; Z = 456;}};
我有一个函数,它应该返回对表a.b中给定值的引用

local function GetRef(member)
    --return a reference to a.b[member]
end
我需要调用GetRef的原因是,调用它的另一个函数需要能够为表中提供的值分配一个新值:

local function AssignValue(key, value)
    local ref = GetRef(key);
    ref = value;
end
现在你可以问“为什么不直接返回a.b,然后键入ref[key]在赋值函数中赋值?”,我可以这样做,但是如果我决定用这种方式实现我现在试图实现的东西,我就不会学到任何新东西了,是吗

我将感谢任何帮助


谢谢

Lua中没有对值的引用

但您可以使用upvalue:

local function AssignValue(key, value)
    a.b[key] = value
end
如果要对多个表执行此操作,请尝试

function makeSetPath(t)
    return function (key,value) t[key]=value end
end

AssignValue = makeSetPath(a.b)

说Lua没有推荐人并不完全正确

实际上,每个变量都存储对某个值的引用。内部有一些快捷方式,允许Lua直接在变量中存储简单的值,而不是引用它,但从Lua的角度看,您无法检查这是否正确,这并不重要

重要的是,为变量指定新值只会更改存储在变量中的引用。这与Java非常相似——任何对象类型的变量都是引用,并通过函数/方法中的值传递。因此,不能通过为变量赋值来更改值,只能引用不同的值

因此,要更改已存储的值,必须显式地对其进行变异。大多数Lua类型都是不可变的(数字/布尔值/字符串),只剩下表、线程和闭包作为可能更改的主题。这意味着你必须存储你想要变异的值


按照您的示例,您不能通过引用存储在表中的某些值来更改表的内容。如果将值321(Y索引)存储在
局部ref
变量中,则不能对其进行变异,因为数字是不可变的。为
ref
变量指定新值只会引用不同的值。您必须存储
b
表的值,以便能够在某些索引下分配新的值,并且您还需要存储该索引(或者@lhf已经建议的
完整路径

我感谢您的回答,但upvalues在我的情况下无法做到这一点。我在想,也许有一种方法可以实现我试图用元表实现的功能?或者,由于可以对表进行引用,所以可以对表进行一般性的操作。你到底想完成什么?因为根据您的用例,可能还有另一个更好的解决方案。