为何下述Lua代码执行后无输出?请告知解决方法
为什么你的Lua脚本没有输出?问题分析与修复
Hey, let's break down why your abc.lua script isn't producing any output, and fix it step by step:
核心问题1:无限递归死循环
你覆盖了全局的print函数,但在自定义函数内部又调用了print(printResult),这会触发无限递归循环——每次调用你的print都会再次触发自身调用,程序永远卡在递归里,根本没机会执行真正的输出逻辑。
核心问题2:过时的可变参数处理方式
在Lua 5.1及以后的版本中,全局的arg表已经被弃用了,访问可变参数应该直接用...,并通过table.pack将参数打包成表来处理。
核心问题3:未保留原生print函数
你直接替换了全局的print,但又需要用原生的print来输出最终结果,所以在重写之前必须先保存原生函数的引用,否则就彻底失去了控制台输出的能力。
修正后的完整代码
-- 先保存原生print函数的引用 local originalPrint = print printResult = "" function print(...) -- 将可变参数打包成表,兼容Lua 5.1+版本 local args = table.pack(...) for i, v in ipairs(args) do printResult = printResult .. tostring(v) .. "\t" end printResult = printResult .. "\n" -- 调用原生print函数输出结果 originalPrint(printResult) end -- 执行传入的参数输出 print(...)
验证效果
现在你在命令行执行lua abc.lua Hello Lua World,就能得到预期输出:
Hello Lua World
如果直接执行lua abc.lua(不带参数),会输出一个空行,这也符合逻辑——因为没有传入任何需要打印的内容。
内容的提问来源于stack exchange,提问作者kkxx
相关产品推荐
相关产品推荐

