如何以字符串下标的方式正确访问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

-- 出现错误(尝试对空值进行索引字段“S_NO”)
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")

有没有办法使第一个情况工作?(减少冗余)

原文链接 https://stackoverflow.com/questions/5445488

点赞
stackoverflow用户145077
stackoverflow用户145077

好的,

找到答案了。

如果 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}

希望这能帮到您!

2011-03-26 22:14:39