Lua Notes

aliasing fields
Login

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.