在Lua中使用arg作为参数名称有副作用吗?

时间:2018-10-14 12:46:38

标签: parameters lua arguments special-variables

我使用arg作为函数的参数名称:

function foo(cmd, arg)
    -- etc.
end

我刚刚了解到arg是一个特殊的隐藏变量,它表示使用可变参数 时的参数表:

function foo(bar, baz, ...)
    -- `arg` now holds arguments 3 and up
end

在代码中使用arg作为参数名称时,我会遇到任何问题吗?

2 个答案:

答案 0 :(得分:1)

首先,请注意我正在使用Lua 5.3,这是我更喜欢的版本。 (不过,我想我之所以喜欢它,仅仅是因为它是我最开始并且最熟悉的那个。)

第二,您使用的是Lua的哪个版本?在Lua 5.3中,arg是指包含传递给脚本的所有命令行参数的表。例如,假设我有一个名为test.lua的脚本,它看起来像这样:

for i, v in ipairs(arg)  do
    print(i, v)
end

如果我以lua test.lua hello there, friend的身份执行脚本,它将产生输出

hello
there,
friend

请注意,在Lua 5.3中,arg是全局环境表_ENV的成员;因此arg等效于_ENV.arg_ENV["arg"]

在Lua 5.3中,似乎arg作为函数中可变参数的标记已被弃用。但是,存在一个基于表的简单解决方案,如以下示例所示:

function foo(...)
    -- Collect the variable arguments in a table.
    local args = {...}
    for i, v in ipairs(args) do print(i, v) end
    return
end

在旧版本的Lua中,行local args = {...}与变量arg的行为相同。

答案 1 :(得分:0)

我知道这会引起问题,但不确定具体含义。所以我决定自己尝试一下。

我尝试了示例中显示的函数,并得到了堆栈溢出错误。

根据lua官方网站,

调用此函数时,其所有参数都收集在一个表中,该函数作为名为arg的隐藏参数进行访问。

所以我认为最好不要调用参数“ arg”