Lua: 作为函数参数传递嵌套表的索引?

是否有可能有一个函数可以访问任意嵌套表的条目? 以下示例仅适用于一个表。但在我的实际应用程序中,我需要函数来检查给定(嵌套)索引的多个不同表。

local table1 = {
  value1 = "test1",
  subtable1 = {
    subvalue1 = "subvalue1",
  },
}

local function myAccess(index)
  return table1[index]
end

-- 这是好的:
print (myAccess("value1"))

-- 但如何访问subtable1.subvalue1?
print (myAccess("subtable1.subvalue1???"))
点赞
用户8621712
用户8621712

你不能仅仅使用字符串来做这件事,除非你使用 load 把它当成 Lua 代码来处理,或者是写一个函数来遍历一个表格。

你可以写一个函数,通过 . 来分割字符串,获取每个键,然后逐一去处理。

你也可以使用 gmatch 和一个在当前表格上的局部变量来实现。

2020-12-20 23:39:05
用户617065
用户617065

@Spar: 这是你建议的吗?无论如何,它能正常运行,谢谢!

local table1 = {
  value1 = "test1",
  subtable1 = {
    subvalue1 = "subvalue1",
  },
}

local function myAccess(index)
  local returnValue = table1
  for key in string.gmatch(index, "[^.]+") do
    if returnValue[key] then
      returnValue = returnValue[key]
    else
      return nil
    end
  end
  return returnValue
end

-- 这样也可以:
print (myAccess("value1"))

-- 这样也可以:
print (myAccess("subtable1.subvalue1"))
2020-12-21 00:14:31