我需要解析一个表示表的路径的字符串,并将其转换为实际的表以查找嵌套在表结构中的值:
local function strsplit(str, sep)
sep = sep or "%s";
local tbl = {};
local i = 1;
for str in string.gmatch(str, "([^"..sep.."]+)") do
tbl[i] = str;
i = i + 1;
end
return tbl;
end
local function parser(path, tbl)
local value;
local keys = strsplit(path, ".");
for _, key in pairs(keys) do
value = (value and value[key]) or tbl[key];
end
return value;
end
local data = {
colors = {
r = 1, g = 1, b = 1
}
}
local red = parser("colors.r", data);
print(red); -- prints 1 (correct!)
此代码与预期输出完美匹配。但是,我想改变“解析器”功能,以便它也可以使用数字索引值而不仅仅是字符串作为键(表的索引部分,而不仅仅是哈希表):
local data = {
list = {
50, 40, 30, 20, 10
}
}
local value = parser("colors.list[2]", data);
print(value); -- should print 40
当拆分表示表路径的字符串时,其中一个键将变为“list [2]”,这应该转换为真实表。因此,我将需要某种正则表达式匹配解决方案,它将能够识别方括号并使其成为魔术;我只是不知道从哪里开始。