2013-10-31 105 views
6

我在C中有幾個值,我想從Lua更新,我寫了自己的綁定函數,但是我想知道是否有可能。從Lua設置C屬性

我希望能夠做到這一點

myNamespace.myValue = 10 

,並把它做同樣的事情,因爲這

myNamespace.setMyValue(10) 

可能嗎?只是好奇而已。直接分配/讀取值而不是調用get/set函數更清晰。 Lua能做這樣的自動翻譯嗎?

回答

7

這當然是可能的。您可以重載__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

+2

這是根據OP請求。爲什麼他想爲每個變量編寫setter,而不是直接使用'__newindex'方法,我不知道。 – lhf

+2

請注意,爲此,'setMyValue'不應寫入'myNamespace.myValue',而應寫入私人表。 '__index'元方法應該從該表中讀取。 – lhf

+0

太棒了!我認爲這是一個遠射。 Lua每天都會變涼,謝謝。 –