Есть ли побочные эффекты от использования `arg` в качестве имени аргумента в Lua?

Я использовал arg в качестве имени аргумента для функции:

function foo(cmd, arg)
    -- etc.
end

Я только что узнал arg является специальной скрытой переменной, которая представляет таблицу аргументов при использовании переменных аргументов:

function foo(bar, baz, ...)
    -- `arg` now holds arguments 3 and up
end

Стоит ли ожидать каких-либо проблем с использованием arg как имя аргумента в моем коде?

0 ответов

Во-первых, обратите внимание, что я использую Lua 5.3, и это моя версия. (Хотя, думаю, я предпочитаю его просто потому, что это тот, который я начал и с которым я больше всего знаком.)

Во-вторых, какую версию Lua вы используете? В Lua 5.3argотносится к таблице, содержащей все аргументы командной строки, переданные скрипту. Например, скажем, у меня есть сценарий под названиемtest.lua это выглядело примерно так:

for i, v in ipairs(arg)  do
    print(i, v)
end

Если бы я выполнил сценарий как lua test.lua hello there, friend, это даст результат

hello
there,
friend

Обратите внимание, что в Lua 5.3, arg является членом глобальной таблицы среды, _ENV; таким образомarg эквивалентно _ENV.arg или _ENV["arg"].

В Lua 5.3 кажется, что argкак маркер вариативных аргументов в функции был обесценен. Однако существует простое решение на основе таблиц, как в следующем примере:

function foo(...)
    -- Collect the variable arguments in a table.
    local args = {...}
    for i, v in ipairs(args) do print(i, v) end
    return
end

Линия local args = {...} имеет такое же поведение переменной arg внутри функций в более старой версии Lua.

Я знал, что это вызовет проблемы, но не знал, в чем конкретно. Поэтому я решил попробовать сам.

Я попробовал функцию, показанную в вашем примере, и получил ошибку переполнения стека.

И согласно официальному сайту lua,

Когда эта функция вызывается, все ее аргументы собираются в одной таблице, к которой функция обращается как скрытый параметр с именем arg.

Поэтому я думаю, что лучше не называть параметры "arg"

Другие вопросы по тегам