我有一些在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"
这将打印出"将值设置为Hello"。
您可能希望重载__index来使用getMyValue
完成相同的操作。
__newindex
方法,我不知道。 - lhf