从Lua设置C属性

我在 C 中有一些值,我想从 Lua 中进行更新,并编写了自己的绑定函数,但我想知道是否有可能做到以下操作。

我想能够执行以下操作

myNamespace.myValue = 10

并与以下操作执行相同的操作

myNamespace.setMyValue(10)

可能吗?主要是好奇。直接分配/读取值比调用 get/set 函数更清晰。Lua 能做到自动翻译吗?

点赞
用户1301852
用户1301852

这是完全可行的。你可以重载__newindex元方法将myValue翻译成setMyValue,然后在表格中调用它。例如:

local meta = {
    __newindex = function(t, key, value)
        local setterName = "set" .. key:sub(0, 1):upper() .. key:sub(2)
        local setter = t[setterName]
        if setter == nil then
            error("Setter " .. setterName .. " does not exist on table")
        end

        return setter(t, value)
    end
}

local table = {
    setMyValue = function(self, v)
        print("Set value to " .. tostring(v))
    end
}
setmetatable(table, meta)

table.myValue = "Hello"

这将打印“Set value to Hello”。

你可能还想重载 __index 方法以使用 getMyValue 进行同样的操作。

2013-10-31 09:08:41