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]
)
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]
)