Lua: 在元表中扩展userdata

我在尝试找到一种适当的解决方案来扩展一些受保护的员工userData,以便可以轻松访问附加条目/数据。

以下是我要做的粗略示例:

这个方法有效,但我不喜欢将所有自定义逻辑放在索引函数中

setmetatable(self,{
    __index = function(t,k)
        if k == "isDriving" then --自定义数据
            return user.inCar and user.onRoad
        elseif k == "isLateToWork" then --自定义数据
            return user.wokeUpLate and user.startTime < user.arrivalTime
        else
            return user[k] --原始userData
        end
    end
})

如何访问自定义数据:

print(employee.isDriving)

理想情况下,我希望将自定义逻辑放在单独的函数中,如下例所示:

这个方法无效,也无法传递参数(返回nil)...

if k == "isDriving" then --自定义数据
    return self:IsDriving(t) --t保存carData和roadData

如何解决这个问题?是否有更好的解决方案?

点赞
用户107090
用户107090

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

因此,当第一次使用 k 等于 IsDriving 调用索引元方法时,创建一个函数来完成想要的操作,将其 rawsetIsDriving,并返回它。

然而,最好一开始就创建一个普通的名为 IsDriving 的方法。

2018-04-02 23:11:06