LUA,类似于指向变量的指针



我有通过UART发送数据的功能——他们需要一个字节的数据和地址来存储在目标设备中。我不能直接调用这个函数,所以我有一个函数将这些数据放入队列。现在我想检查uart是否正确写入数据,所以我认为最好的方法是在发送后直接读取数据,并使用指向变量的指针代替变量。问题是LUA不像C中那样支持指针,因为这里的一切都是指针(如果我理解得好的话(。那么,如何给出LUA中的函数";指针";并通过内存中的地址读取/写入变量?

Tables是Lua的引用类型(除了userdata,它在纯Lua中不能很好地使用-您需要一个C部分来使用它(。你可以琐碎地实现";指针";使用表{value = ...}:

local function work_with_pointer(pointer)
pointer.value = 42
end
local pointer = {value = 33}
work_with_pointer(pointer)
print(pointer.value) -- 42

也就是说,在当前状态下,这不是很习惯的Lua——理想情况下,您会返回更改后的值——但对于更复杂的";指针";(表(可能是;在这种情况下,简单地使用一个upvalue就足够了:

local value = 33
local function work_with_upvalue()
value = 42
end
work_with_upvalue()
print(value) -- 42

然而,这有一个局限性,即它要求函数在变量的词法范围内。

最新更新