alo*_*ras 2 lua luajit openresty
我的理解是LuaJIT使用Lua 5.1语法。在 Lua 5.1 中,“arg”功能已从语言中删除。
但是,以下代码可以工作。
// test.lua
local function foo()
for k,v in pairs(arg) do
print(k .. " " .. v)
end
end
foo()
Run Code Online (Sandbox Code Playgroud)
我预计arg
为零,但它存在并且正在执行 Lua 5.0 功能。
运行resty test.lua hello world
结果为:
0 test.lua
1 hello
2 world
-1 /usr/local/bin/resty
Run Code Online (Sandbox Code Playgroud)
为什么这有效?Openresty 和 LuaJIT 可以使用的 5.1 语法是否有例外?
你正在混合两种不同的东西。
您在这里看到的表arg
不是“已弃用的 Lua 功能”。它是提供给 Lua 解释器的参数表,arg
由解释器显式推送到全局变量,并且在最新的 Lua 和 LuaJIT 版本中仍然存在。
您听说过的功能已被删除 - 即用arg
vararg 函数中的 vararg 表达式替换隐式参数。即,函数的额外参数现在可以通过...
语法使用,而不是通过隐式参数作为收集值的表arg
。