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]

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

点赞
用户2969217
用户2969217

Lua 中原始的结构体概念并不存在,但是表(tables)可以用来达到类似的目的。

使用表:

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

然后可以通过 font[letter][x]font.letter[x] 进行访问。需要注意的是,Lua 数组的下标不是从零开始的,因此 x 从 1 开始。

如果需要更多的“结构”,则可以使用函数来构建表格:

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,则可以这样构建表:

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]

2015-11-02 00:26:57