Lua循环填充表后打印仅输出nil问题排查
问题分析与修复方案
你的代码问题出在循环打印时没有正确引用子表中的字段,导致输出全是nil。
具体原因
在for k, v in pairs(interfaces)循环中,v代表interfaces里的每一个网卡配置子表(比如{ device = "eth1", address = "192.168.1.1" })。但你直接写print(device, address)时,Lua会把device和address当成未定义的全局变量——而未赋值的全局变量默认值就是nil,所以才会输出一串nil。
修复后的代码
只需要把打印语句改成引用v中的字段即可:
-- Define ten network interfaces interfaces = {} -- Define an empty table for n = 1, 10 do interfaces[n] = { device = "eth"..n, address = "192.168.1."..n } end for k, v in pairs(interfaces) do -- 这里要通过v访问子表的device和address字段 print(v.device, v.address) end
额外小建议
因为你的interfaces是连续整数索引的数组(从1到10),使用ipairs遍历会比pairs更贴合语义(ipairs专门遍历连续整数键的数组,pairs会遍历所有类型的键),修改后的循环可以写成:
for k, v in ipairs(interfaces) do print(v.device, v.address) end
这样运行结果和之前一样,但代码的可读性和语义准确性更好。
内容的提问来源于stack exchange,提问作者Geraldo Luiz Cartolano
相关产品推荐
相关产品推荐

