Lua:在元表中扩展userdata

时间:2018-04-02 22:45:17

标签: lua metatable lua-userdata

我正在尝试为一些受保护的员工userData找到一个合适的解决方案,我想扩展其他条目/数据以便于访问

以下是我正在尝试做的一个粗略的例子:
这有效,但我不喜欢我必须将所有自定义逻辑放在索引函数中

setmetatable(self, {
    __index = function(t,k)
        if k == "isDriving" then --custom data
            return user.inCar and user.onRoad
        elseif k == "isLateToWork" then --custom data
            return user.wokeUpLate and user.startTime < user.arrivalTime
        else
            return user[k] --original userData
        end
    end
})

以及我如何访问自定义数据:

print(employee.isDriving)

理想情况下,我想将自定义逻辑放在一个单独的函数中,如下例所示:
这不起作用,也不能传递参数(返回nil)......

if k == "isDriving" then --custom data
    return self:IsDriving(t) --t holds carData and roadData

我该如何解决这个问题?有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

self:IsDriving(t)self.IsDriving(self,t)的糖。

因此,第一次调用索引元方法时k等于IsDriving,创建一个能够执行所需操作的函数,rawset它到IsDriving,以及把它归还。

但是,首先创建一个名为IsDriving的普通方法会更容易。