aliasing fields
##[[
local function alias_field(recsym, name, dotindex, fieldtypesym)
recsym.value.fields[name] = {name = dotindex, type = fieldtypesym.value}
end
]]
local Player: type = @record{
name: string,
pos: record {
x: integer,
y: integer
}
}
alias_field!(@Player, 'x', 'pos.x', @integer)
alias_field!(@Player, 'y', 'pos.y', @integer)
local p: Player = {pos={1,2}}
p.x = -1
p.y = -2
print(p.x, p.y)For an evolution of this, c.f. flattened goblins.
Limitation: local p: Player = {x=-1, y=-2} isn't possible.