lua 中的结构数组?

Array of structs in lua?

lua 是否支持某种 C 风格结构?

我想从 c:

转换类似以下字体位图的内容
struct charmatrix { char c;  int line[5]; };
static charmatrix font[] =
{
  "1", {0x2, 0x6, 0x2, 0x2, 0x2},
  "2", {0xe, 0x1, 0x6, 0x8, 0xf},

  "a" , {0x0, 0x5, 0xb, 0xb, 0x5}

}

font[letter].line[x]

[编辑] 添加了更多数据以显示非数字索引

Lua 中没有结构的原始概念,但 table 有类似的用途。

使用 tables:

local font = {
  ["1"] = {0x2, 0x6, 0x2, 0x2, 0x2},
  ["2"] = {0xe, 0x1, 0x6, 0x8, 0xf}
}

然后可以访问 font[letter][x]font.letter[x]。请记住,Lua 数组不是零索引的,因此 x 从 1 开始。

如果你需要更多的结构那么你可以使用一个函数来构造table:

local function charmatrix(c, l1, l2, l3, l4, l5)
  return {[c] = { l1, l2, l3, l4, l5 }}
end

local font = {
  charmatrix("1", 0x2, 0x6, 0x2, 0x2, 0x2),
  charmatrix("2", 0xe, 0x1, 0x6, 0x8, 0xf),
}

但这可能有点矫枉过正。

编辑:如果您想在代码中保留 line,您可以像这样构造一个 table:

local font = {
  ["1"] = { line = {0x2, 0x6, 0x2, 0x2, 0x2} },
  ["2"] = { line = {0xe, 0x1, 0x6, 0x8, 0xf} }
}

已访问 font[letter].line[x]font.letter.line[x]
请注意,作为字符串的键在定义时不需要引号,除了数字字符串,这就是为什么 line 不被引号包围而 "1""2" 被引号包围的原因。 (所以您可以使用代码访问:font[letter]["line"][x]