Как правильно переопределить печать в Lua 5.3?

Я часто использую функцию print для отладки в сочетании с os.exit(). Я не хочу вводить os.exit() каждый раз, когда использую print, поэтому я хочу переопределить эту функцию.

> function pprint(...)
>> for _,a in ipairs(arg) do
>> print(a)
>> end
>> os.exit()
>> end


> pprint('hello',1,2,3)
hello
1
2
3
[johndoe@dell-john ~]$ 

Хотя это работает в Lua 5.1, это не работает в Lua 5.3 и по какой-то причине Факел. Я просмотрел документы Lua 5.3 для выражения «тройные точки», но не смог найти ссылку на то, как получить доступ к ... аргументам. Можете ли вы объяснить, что было изменено и как переопределить print для Lua 5.3?


person minerals    schedule 08.01.2017    source источник


Ответы (2)


Автоматическое создание таблицы arg для функций с переменным числом аргументов устарело в Lua 5.1 и удалено в Lua 5.2.

Как упоминал Егор, используйте

for _,a in ipairs({...}) do

вместо

for _,a in ipairs(arg) do

Или добавить

local arg={...}

в начале функции.

person lhf    schedule 08.01.2017

for _,a in ipairs({...}) do неправильно, он не поддерживает nil

правильно переписать

local arg = table.pack(...)
for i = 1 ,arg.n do
    old_print(arg[i])
end
person Xt Z    schedule 20.10.2020