You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:55:12