我想实现一些Lua数据结构来实现以下语法:
units
- >返回一个单位表。units[0]
- >返回一个数字。units[0].properties
- >返回一个属性表。units[0].properties[0]
- >返回单位[0]的属性,也是一个数字。给定数字索引表,前两个步骤是微不足道的。 但我可以同时达到所有4个要求吗?
我正在考虑使用自定义units
元方法创建__index
。这是正确的方向吗?
答案 0 :(得分:1)
可以为所有数字设置元表(通过debug.setmetatable
)并使用__index
元方法来解析属性:
local properties_by_nums = {
{42},
{23},
}
local num_mt = {
__index = function(n, i)
if i == 'properties' then
return properties_by_nums[n]
end
return nil
end
}
debug.setmetatable(0, num_mt)
units = {1, 5}
print(type(units)) -- table
print(units[1], type(units[1])) -- 1, number
print(type(units[1].properties)) -- table
print(units[1].properties[1], type(units[1].properties[1])) -- 42, table
(可能更干净)替代方案是将您的单位值定义为表现类似数字的表格。这可以通过实现元方法__add
,__mul
等来实现。