Lua中数组作为函数参数传参报错问题求助
问题分析与解决方案
核心问题1:模块定义不规范
你的test.lua中直接定义test.fn,但未先创建test模块表,执行时会触发attempt to index global 'test' (a nil value)错误。
核心问题2:arg的误用
Lua中的arg是命令行参数的特殊全局表,它包含arg[0](脚本文件名)和arg.n(参数个数),直接传递给函数时,#arr计算的连续整数键长度可能和实际参数个数不符;如果在非命令行环境运行,arg甚至会是nil。
修复后的代码
test.lua(规范模块定义)
-- 先创建模块表 local test = {} function test.fn(arr) -- 增加参数类型校验,避免nil报错 if type(arr) ~= "table" then print("错误:参数必须是数组类型") return end -- 遍历数组元素 for i = 1, #arr do print(arr[i]) end end -- 返回模块表,符合Lua模块规范 return test
test1.lua(正确传递参数)
场景1:传递自定义数组
-- 加载模块 local test = require "test" -- 自定义数组 local my_array = {"苹果", "香蕉", "橙子"} -- 传入函数 test.fn(my_array)
场景2:传递命令行参数
local test = require "test" -- 提取有效命令行参数(跳过脚本名arg[0]) local cmd_args = {} for i = 1, (arg.n or #arg) do cmd_args[i] = arg[i] end test.fn(cmd_args)
运行时通过命令行传参:lua test1.lua 参数1 参数2 参数3
内容的提问来源于stack exchange,提问作者h1kkar
相关产品推荐
相关产品推荐

