Почему LuaJIT / Openresty может использовать устаревшую языковую функцию 'arg'? - PullRequest
0 голосов
/ 30 сентября 2018

Насколько я понимаю, 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

Почему это работает?Существуют ли исключения из синтаксиса 5.1, которые могут использовать Openresty и LuaJIT?

1 Ответ

0 голосов
/ 30 сентября 2018

Вы смешиваете две разные вещи.

Таблица arg, которую вы видите здесь, не является "устаревшей функцией Lua".Это таблица аргументов, переданная интерпретатору Lua, явно переведенная интерпретатором в глобальную переменную arg, и она все еще присутствует в последних версиях Lua и LuaJIT.

Функция, которую вы слышали, была удалена -речь идет о замене неявного параметра arg выражением vararg в функциях vararg.Т.е. дополнительные аргументы для функций теперь доступны через синтаксис ..., а не как таблицу собранных значений через неявный параметр arg.

...