Lua: 扩展元表中的用户数据
Lua: extending userdata in metatables
我正在尝试为一些受保护的员工用户数据找到合适的解决方案,我想通过额外的 entries/data 扩展以便于访问
这是我正在尝试做的粗略示例:
这可行,但我不喜欢我必须将所有自定义逻辑放在索引函数中
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)
理想情况下,我想将自定义逻辑放在单独的函数中,如下例所示:
这行不通,也不能传递参数 (returns nil)...
if k == "isDriving" then --custom data
return self:IsDriving(t) --t holds carData and roadData
我该如何解决这个问题?有没有更好的解决方案?
self:IsDriving(t)
是 self.IsDriving(self,t)
的糖分。
因此,第一次使用 k
等于 IsDriving
调用索引元方法时,创建一个函数来执行您想要的操作,rawset
它到 IsDriving
, 和 return 它。
但是,首先创建一个名为 IsDriving
的普通方法会更简单。
我正在尝试为一些受保护的员工用户数据找到合适的解决方案,我想通过额外的 entries/data 扩展以便于访问
这是我正在尝试做的粗略示例:
这可行,但我不喜欢我必须将所有自定义逻辑放在索引函数中
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)
理想情况下,我想将自定义逻辑放在单独的函数中,如下例所示:
这行不通,也不能传递参数 (returns nil)...
if k == "isDriving" then --custom data
return self:IsDriving(t) --t holds carData and roadData
我该如何解决这个问题?有没有更好的解决方案?
self:IsDriving(t)
是 self.IsDriving(self,t)
的糖分。
因此,第一次使用 k
等于 IsDriving
调用索引元方法时,创建一个函数来执行您想要的操作,rawset
它到 IsDriving
, 和 return 它。
但是,首先创建一个名为 IsDriving
的普通方法会更简单。