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

Seg*_*ult 8 lua arguments function variadic-functions

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)
Run Code Online (Sandbox Code Playgroud)

为什么是它使用...在表达式引起的值arg
进行nil,例如用print("value of implicit table:",...)select(1,...)

Tox*_*rog 14

Lua 5.1正式弃用该arg表用于varargs,更喜欢....但是,Lua本身有一个编译时选项LUA_COMPAT_VARARG,允许使用arg5.1代码.

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

这样做的结果是,如果LUA_COMPAT_VARARG定义了,那么...在体内不使用的vararg函数会得到一个local arg包含参数列表的函数,而vararg函数得到一个local arg包含它的函数nil.此错误存在于5.1的所有版本中,特别是,arg如果LUA_COMPAT_VARARG在编译时定义,则无法访问从任何varargs函数命名的全局值或高值.

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

(来源:5.0和5.1之间的varargs处理的变化,以及LUA_COMPAT_VARARG选项,在Lua 5.1参考手册的第7.1节中提到.手册引用你的luaconf.h.确切的行为没有记录在任何地方,就我而言我知道;可以通过读取lparser.cldo.c,或者最初报告此问题的邮件列表上的帖子,通过实验确定.)