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

2024-01-04

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 to
be nil例如和print("value of implicit table:",...) or select(1,...)?


Lua 5.1 正式弃用了arg可变参数表,首选...。然而,Lua 本身有一个编译时选项,LUA_COMPAT_VARARG,允许使用arg在5.1代码中。

If LUA_COMPAT_VARARGLua编译时就定义了,arg表将在 varargs 函数中创建,并用参数填充 - 除非编译器检测到使用...函数内部。在这种情况下,它假定您使用 5.1 样式的可变参数而不是 5.0,并且不会创建表。它does但是,仍然创建本地命名的arg!

这样做的结果是,如果LUA_COMPAT_VARARG已定义,不使用的 vararg 函数...在体内得到一个local arg包含参数列表和 vararg 函数do get a local arg含有nil。此错误存在于 5.1 的所有版本中,特别意味着您无法访问名为的全局或上值arg来自任何可变参数函数如果LUA_COMPAT_VARARG是在编译时定义的。

Lua 5.2 不再支持arg-style varargs 完全如此,因此无论编译时如何配置,都不存在此问题。

(来源:5.0 和 5.1 之间 varargs 处理的变化,以及LUA_COMPAT_VARARG选项,在中提到Lua 5.1 参考手册,第 7.1 节 http://www.lua.org/manual/5.1/manual.html#7.1。说明书给你参考luaconf.h http://www.lua.org/source/5.1/luaconf.h.html。据我所知,确切的行为没有任何记录;它可以通过实验确定,通过阅读lparser.c http://www.lua.org/source/5.1/lparser.c.html and ldo.c http://www.lua.org/source/5.1/ldo.c.html,或来自最初报告此问题的邮件列表中的帖子。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在函数的任何表达式中使用 ... 会导致 Lua 中 arg 的值为 nil? 的相关文章

随机推荐