【问题标题】:Why can LuaJIT/Openresty use deprecated 'arg' language feature?为什么 LuaJIT/Openresty 可以使用已弃用的 'arg' 语言功能?
【发布时间】:2019-03-05 23:28:43
【问题描述】:

我的理解是 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 语法有例外吗?

【问题讨论】:

    标签: lua luajit openresty


    【解决方案1】:

    你混合了两种不同的东西。

    您在此处看到的arg 表不是“已弃用的 Lua 功能”。它是提供给 Lua 解释器的参数表,由解释器显式推送到全局 arg 变量,并且在最新的 Lua 和 LuaJIT 版本中仍然存在。

    您听到的功能已被删除 - 这是关于用 vararg 函数中的 vararg 表达式替换隐式 arg 参数。 IE。现在可以通过... 语法获得函数的额外参数,而不是通过隐式arg 参数作为收集值的表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2023-02-14
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      相关资源
      最近更新 更多