Как устранить неоднозначность командной строки и переменных аргументов в Lua?

В частности, Луаджит. Я пишу сценарий в качестве учебного упражнения и пытаюсь использовать переменные аргументы. Однако при этом просто печатаются аргументы командной строки. Я перепроверил документацию и действительно, оба приложения используют переменную arg.

Как мне указать, когда я хочу использовать один вместо другого?

function init(...)
    for k,v in pairs(arg) do print(k,v) end
    -- Function body.
end

Выход,

0   /.../lua_script.lua
-1  luajit

person Lemma Prism    schedule 23.08.2018    source источник


Ответы (1)


LuaJIT, основанный на Lua 5.1, использует более новый синтаксис vararg, в котором вы вручную записываете varargs в таблицу:

function init (...)
  local args = { ... }
  for k, v in pairs(args) do print(k, v) end
end

Специальная переменная arg в LuaJIT используется только для аргументов командной строки.

См. третий пункт часто задаваемых вопросов по LuaJIT.

person Josh Parnell    schedule 23.08.2018
comment
О, хорошо! Спасибо! Итак, в Lua 5.3 есть новый способ сделать это? - person Lemma Prism; 24.08.2018
comment
@LemmaPrism Ошибаетесь, на самом деле, при ближайшем рассмотрении кажется, что этот способ является более новым (5.1+) способом сделать это, а arg был старым способом. Я думаю... очень запутанно, так как онлайн PIL устарел... - person Josh Parnell; 24.08.2018
comment
О, да! Ну, это весело. Приятно знать, что PIL устарел... Итак, и Luajit, и Lua5.1+ передают аргументы CMD через arg и varargs через {...}. - person Lemma Prism; 24.08.2018