为什么在函数的任何表达式中使用…都会导致Lua中arg的值为nil?

function tell(num,...)
    print("value of implicit table:",arg)
    --print("value of implicit table:",...)
    select(1,arg)
    --select(1,...)
end
tell(12,43,12,55)

为什么在表达式中使用…会导致arg的值
没有,例如with print(“隐含表的值:”,…)或select(1,…)?

解决方法

Lua 5.1正式弃用了对varargs使用arg表,更喜欢….但是,Lua本身有一个编译时选项LUA_COMPAT_VaraRG,允许在5.1代码中使用arg.

如果在编译Lua时定义了LUA_COMPAT_VaraRG,则会在varargs函数中创建一个arg表,并使用参数填充 – 除非编译器在函数内部检测到…的使用.在这种情况下,它假定您使用5.1样式varargs而不是5.0,并且不创建表.但是,它确实仍然创建了本地命名的arg!

这样做的结果是,如果定义了LUA_COMPAT_VaraRG,那么在体内不使用…的vararg函数将获得包含参数列表的本地arg,以及获取包含nil的本地arg的vararg函数.此错误存在于5.1的所有版本中,尤其意味着如果在编译时定义了LUA_COMPAT_VaraRG,则无法从任何varargs函数访问名为arg的全局或高值.

Lua 5.2完全支持arg-style varargs,因此无论在编译时如何配置它都没有这个问题.

(来源:5.0和5.1之间的varargs处理和LUA_COMPAT_VaraRG选项的变化在the Lua 5.1 reference manual,section 7.1中提到.手册将您引用到luaconf.h.据我所知,确切的行为没有记录在任何地方;它可以是通过阅读lparser.cldo.c,或者最初报告此问题的邮件列表上的帖子,通过实验确定.)

相关文章

1.github代码实践源代码是lua脚本语言,下载th之后运行thmai...
此文为搬运帖,原帖地址https://www.cnblogs.com/zwywilliam/...
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能...
localfunctiongenerate_action(params)localscale_action=cc...
2022年1月11日13:57:45 官方:https://opm.openresty.org/官...
在Lua中的table(表),就像c#中的HashMap(哈希表),key和...