为什么 LuaJIT/Openresty 可以使用已弃用的 'arg' 语言功能?
Why can LuaJIT/Openresty use deprecated 'arg' language feature?
我的理解是 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()
我希望 arg
为零,但它存在并且正在执行 Lua 5.0 功能。
运行 resty test.lua hello world
结果:
0 test.lua
1 hello
2 world
-1 /usr/local/bin/resty
为什么这行得通? Openresty 和 LuaJIT 可以使用的 5.1 语法有例外吗?
你在混合两种不同的东西。
您在这里看到的 arg
table 不是 "deprecated Lua feature"。它是给 Lua 解释器的 table 个参数,由解释器显式推送到全局 arg
变量,它仍然存在于最新的 Lua 和 LuaJIT 版本。
您听说过的功能已删除 - 即在可变参数函数中用可变参数表达式替换隐式 arg
参数。 IE。函数的额外参数现在可通过 ...
语法使用,而不是作为通过隐式 arg
参数收集的值的 table。
我的理解是 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()
我希望 arg
为零,但它存在并且正在执行 Lua 5.0 功能。
运行 resty test.lua hello world
结果:
0 test.lua
1 hello
2 world
-1 /usr/local/bin/resty
为什么这行得通? Openresty 和 LuaJIT 可以使用的 5.1 语法有例外吗?
你在混合两种不同的东西。
您在这里看到的 arg
table 不是 "deprecated Lua feature"。它是给 Lua 解释器的 table 个参数,由解释器显式推送到全局 arg
变量,它仍然存在于最新的 Lua 和 LuaJIT 版本。
您听说过的功能已删除 - 即在可变参数函数中用可变参数表达式替换隐式 arg
参数。 IE。函数的额外参数现在可通过 ...
语法使用,而不是作为通过隐式 arg
参数收集的值的 table。