5

arg用作函数的参数名称:

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

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

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

我应该期待在我的代码中使用arg作为参数名称有什么问题吗?

4

2 回答 2

2

首先,请注意我使用的是 Lua 5.3,这是我喜欢的版本。(不过,我想我更喜欢它只是因为它是我开始使用并且最熟悉的。)

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

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

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

hello
there,
friend

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

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

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

于 2020-01-17T04:36:59.963 回答
0

我知道这会导致问题,但不确定具体是什么。所以我决定自己尝试一下。

我尝试了您示例中显示的函数,但出现堆栈溢出错误。

而且根据lua官方网站,

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

所以我认为最好不要将参数称为“arg”

于 2020-01-16T17:46:44.090 回答