6
我在C中有幾個值,我想從Lua更新,我寫了自己的綁定函數,但是我想知道是否有可能。從Lua設置C屬性
我希望能夠做到這一點
myNamespace.myValue = 10
,並把它做同樣的事情,因爲這
myNamespace.setMyValue(10)
可能嗎?只是好奇而已。直接分配/讀取值而不是調用get/set函數更清晰。 Lua能做這樣的自動翻譯嗎?
我在C中有幾個值,我想從Lua更新,我寫了自己的綁定函數,但是我想知道是否有可能。從Lua設置C屬性
我希望能夠做到這一點
myNamespace.myValue = 10
,並把它做同樣的事情,因爲這
myNamespace.setMyValue(10)
可能嗎?只是好奇而已。直接分配/讀取值而不是調用get/set函數更清晰。 Lua能做這樣的自動翻譯嗎?
這當然是可能的。您可以重載__newindex
metamethod將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
。
這是根據OP請求。爲什麼他想爲每個變量編寫setter,而不是直接使用'__newindex'方法,我不知道。 – lhf
請注意,爲此,'setMyValue'不應寫入'myNamespace.myValue',而應寫入私人表。 '__index'元方法應該從該表中讀取。 – lhf
太棒了!我認爲這是一個遠射。 Lua每天都會變涼,謝謝。 –