gpt4 book ai didi

lua - 有没有办法将 "listen"更改为 Lua 表?

转载 作者:行者123 更新时间:2023-12-04 15:44:32 27 4
gpt4 key购买 nike

这纯粹是一个基于兴趣的问题。

有什么方法可以监听/监视 Lua 表并查看是否对其进行了更改,然后在将新条目添加到所述表时调用函数?

换句话说,

local t = {}

local function listener()
print( "new entry added" )
end

t.text = "Hello!"

是否有一些方法、函数或其他方法可以让我在将某些内容添加到表后立即调用特定函数。

我不只是想使用计时器每隔几秒或几毫秒不断地循环遍历表格。

这可行吗?

最佳答案

Programming in Lua 中有一节介绍了这个问题。

Programming in Lua: 13.4.4 – Tracking Table Accesses

这需要使用元表来修改表的基本行为。具体来说,我们需要修改当我们设置表值并从表中获取值时发生的情况,这些是创建您正在寻找的行为的最低限度。

上面的链接有一个很好的例子,下面是你问题中的代码:

local function listener(k,v)
print( "new entry added: \n\tKey = " .. k .. "\n\tValue = " .. v)
end
local metaTable

do
local protectedTable = {}
metaTable = {
__index = function (t,k)
return protectedTable[k]
end,
__newindex = function (t,k,v)
protectedTable[k] = v -- update original table
listener(k,v)
end
}
end

local t = setmetatable({},metaTable)

t.text = "Hello!"
print(t.text)

请记住,此方法不允许您在 t 上使用 pairs,因为它是一个空表并且我没有定义 __pairs 在我的示例中的元表中。

关于lua - 有没有办法将 "listen"更改为 Lua 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57598440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com