如何在 Lua 5.3 中正确地重新定义 print?

我经常在调试中使用 print 函数,与 os.exit() 结合使用。但我不想每次使用 print 都输入 os.exit(),所以我想重新定义这个函数。

> 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 中不起作用,并且由于某种原因,在 Torch 中也不起作用。我查阅了 Lua 5.3 文档中“三点”表达式,但找不到关于如何访问 ... 参数的参考。你能解释一下发生了什么,并说明如何在 Lua 5.3 中重新定义 print 吗?

点赞
用户107090
用户107090

自动创建针对可变参数函数的arg表已在Lua 5.1中弃用,并在Lua 5.2中删除。

如Egor所述,请使用

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

而不是

for _,a in ipairs(arg) do

或在函数开头添加

local arg={...}
2017-01-08 18:50:05
用户5602887
用户5602887

for _,a in ipairs({...}) do 是错误的,它不支持 nil

正确的重写方式:

local arg = table.pack(...)
for i = 1 , arg.n do
    old_print(arg[i])
end
2020-10-20 03:55:33