从 Lua 设置 C 属性

Setting C properties from Lua

本文关键字:属性 设置 Lua      更新时间:2023-10-16

我在 C 中有一些值,我想从 Lua 更新,我已经编写了自己的绑定函数,但我想知道是否有可能。

我希望能够做到这一点

myNamespace.myValue = 10

并让它做与此相同的事情

myNamespace.setMyValue(10)

可能?只是好奇。直接分配/读取值而不是调用 get/set 函数更干净。Lua 可以做这样的自动翻译吗?

这当然是可能的。可以重载 __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"

这将打印"将值设置为"你好"。

您可能希望重载__index以执行相同的操作,但也要使用getMyValue