Lua から更新したい C の値がいくつかあり、独自のバインディング関数を作成しましたが、何か可能かどうか知りたいです。
これができるようになりたい
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"
これにより、「Set value to Hello」が出力されます。
同じことを行うために __index をオーバーロードすることgetMyValue
もできます。