我在love2d引擎上做了一个无关紧要的lua控制台。我正在尝试升级元表以能够影响更多的东西(配对功能,在另一个表上更改元表而不是目标表等),我正在制作的插件之一是__changeindex
当您修改现有的时的一个事件指数。
为了做到这一点,我必须给用户一个不包含任何值的虚拟表,当他们尝试添加一些东西时,检查它是否已经在真实表中定义,如果它是那么 call __changeindex
,如果不是那么 call __newindex
。这可以完美运行,但是这会导致许多其他 Lua 表函数停止工作(对于循环/getmetatable/setmetatable)。我已经为大多数这些问题制定了解决方法,它们工作正常,但我无法让#t 运算符工作,我想说
t1={1,2,3}
t2=setmetatable({},{__getn=function(self) return #t1 end})
然后#t2 应该真的返回#t1。我有什么办法可以做到这一点吗?
我现有的代码可以在这里找到
编辑:这是我的第一篇文章,所以如果我没有完全遵守发布规则,我深表歉意,我试过了 :) 如果有人有办法让假表和真表垃圾收集,我将不胜感激