我试图在Lua中很好地访问带字符串索引的多维数组,这基本上就是我要做的事情:
rules =
{
{"S_RIGHT", "A_STOP", "S_RESULT"},
}
matrix = {}
for _,v in pairs(rules) do
if( matrix[ v[1] ] == nil ) then
matrix[ v[1] ] = {}
end
matrix[ v[1] ][ v[2] ] = v[3]
end
-- results in error ( attempt to index field 'S_NO' a nil value)
var = matrix["S_NO"]["S_RESULT"]
assert(var == nil, "Var should be nil")
这样做的方法非常详细:
var = matrix["S_NO"]
if var ~= nil then
var = var["S_RESULT"]
end
assert(var == nil, "Var should be nil")
有没有办法让第一种情况起作用? (少详细)
答案 0 :(得分:2)
好的,
找到答案。
如果matrix
将是只读的,那么正确的方法是:
local empty = {}
setmetatable(matrix, {__index=function() return empty end})
如果我想允许写入,特别是两级表,我可以这样做:
setmetatable(matrix, {__index=function(t,k) local new={} rawset(t,k,new) return new end}
希望这有帮助!