gpt4 book ai didi

objective-c - 如何为任意数量的Lua对象(表)实现(匿名)Lua回调函数?

转载 作者:行者123 更新时间:2023-11-30 14:26:15 26 4
gpt4 key购买 nike

我在 Lua 中有一些“对象”,它们使用表来维护它们的数据和函数集。简单的例子:

obj = {func = function(self) print(self) end}

可以有任意数量的对象。

现在我有一个 C 函数 registerObject(obj) ,它应该以某种方式保留对该 Lua 对象(obj 表)的引用,以便能够调用该特定对象的 func 函数(和其他函数)晚些时候。这意味着我没有对象表的名称,我需要以某种方式保留对表本身的引用。

我怎样才能做到这一点? C++ 示例也可以接受,实际上 C 函数只是一个为每个 obj 创建 Objective-C 类的接口(interface)。

最佳答案

Lua表是通过引用传递的,所以它们实际上总是“匿名的”,对它们的引用存储在变量中。我只是把你所有的“对象”放在一个表中像这样:

objects={}
function registerObject(obj)
objects[#objects+1]=obj
end
a={func=function(self) return(self.data) end, data='foo'}
b={func=function(self) return(self.data) end, data='bar'}
registerObject(a)
registerObject(b)
for k,v in pairs(objects) do
print("Object",k,"data:",v:func())
end

您需要记住的一件事是,这会禁止收集这些表,因为对象表中始终存在对对象的引用,除非您显式删除它。这可能是也可能不是您想要的。如果您不希望对象表干扰垃圾回收,可以将元表中的 __mode 条目设置为“v”以表示弱值。这样,对对象表中对象的引用就不会被计算在内;如果对象表中的值是对该对象的唯一剩余引用,则将收集该对象(有关详细信息,请参阅 Programming in Lua)。

关于objective-c - 如何为任意数量的Lua对象(表)实现(匿名)Lua回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9412265/

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