【问题标题】:Setting C properties from Lua从 Lua 设置 C 属性
【发布时间】:2013-10-31 19:57:33
【问题描述】:

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

我希望能够做到这一点

myNamespace.myValue = 10

让它做同样的事情

myNamespace.setMyValue(10)

可能吗?主要是好奇。直接分配/读取值而不是调用 get/set 函数更简洁。 Lua 可以做任何这样的自动翻译吗?

【问题讨论】:

    标签: c++ c lua


    【解决方案1】:

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

    【讨论】:

    • 这是根据 OP 请求。为什么他要为每个变量编写setter而不是直接使用__newindex方法我不知道。
    • 请注意,要使其正常工作,setMyValue 不应写入 myNamespace.myValue,而应写入私有表。 __index 元方法应该从该表中读取。
    • 太棒了!我认为这是一个完全的远射。 Lua 每天都在变凉,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多