Lua 中是否有办法确定 __index 调用是链中的最后一个?

我正在将 Lua 与 C++ 集成。我希望能够以层次结构的方式将 C++ 值公开给 Lua,这种方式可能不完全符合 C++ 方法的存储方式。我想要做的是像下面这样:

a.b.c = 5
print(a.b.c)

在 C++ 的函数中,第一个情况会接收到 'a'、'b'、'c' 和 5,第二个情况只会接收到 'a'、'b'、'c'。为了实现这一点,我创建了一个表来保存键和一个元表,其 __index__newindex 方法负责逻辑。目前它看起来像这样:

 metatable.__index = function(t, k)
            rawset(t, t.index, k)
            t.index = t.index + 1
            return t
    end

metatable.__newindex = function(t, k, v)
        rawset(t, t.index, k)
        return newindexCallback(t, v)
    end

这对设置值来说很有效,但是对于获取值来说就不起作用了,因为 a.b.c 会得到一个表,而不是实际值。有没有办法让 __index 方法知道它是链中的最后一个呢?还是还有其他调用的元方法,当实际使用值时调用?或者我必须使用 getter 和 setter?

点赞