在Lua中使用字符串索引访问多维数组的正确方法?

时间:2011-03-26 21:34:55

标签: multidimensional-array lua

我试图在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")

有没有办法让第一种情况起作用? (少详细)

1 个答案:

答案 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}

希望这有帮助!