我使用arg
作为函数的参数名称:
function foo(cmd, arg)
-- etc.
end
我刚刚了解到arg
是一个特殊的隐藏变量,它表示使用可变参数 时的参数表:
function foo(bar, baz, ...)
-- `arg` now holds arguments 3 and up
end
在代码中使用arg
作为参数名称时,我会遇到任何问题吗?
答案 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”