为什么下面的代码无法输出任何结果?

printResult = ""

function print(...)
  for i,v in ipairs(arg) do
      printResult = printResult .. tostring(v) .. "\t"
  end
  printResult = printResult .. "\n"
  print(printResult)
end

print(...)

我有上面的代码,并将其保存在名为abc.lua的文件中。在此之后,我通过lua abc.lua在命令行中运行了代码/文件。没有任何输出出现。有人能告诉我如何解决这个问题吗?

点赞
用户2858170
用户2858170

你实现了无穷递归(recursion)。

print 函数调用了它本身。因此,一旦你第一次调用 print,你的程序就被困在了无穷递归中。随着时间的推移,你的程序将因为堆栈满而崩溃。

你没有看到任何输出,因为你已经重写了 Lua 的标准函数 print,因此你的函数无法在控制台上创建任何输出。

printResult = ""

-- 下面的代码定义了一个调用自身的print功能
function print(...)
  for i,v in ipairs(arg) do
      printResult = printResult .. tostring(v) .. "\t"
  end
  printResult = printResult .. "\n"
  -- 在这里调用了你正在定义的函数
  print(printResult)
end
-- 在这里,您首次调用print,它将一遍又一遍地调用自己……
print(...)

一些解决方案:

a)不要将你的函数命名为 print,这样你仍然可以调用Lua的print

function myPrint(...)
  print("lalala")
end

b)在创建新的函数 print 之前,先创建对 Lua 的 print 的新引用

local luaPrint = print
function print(...)
  luaPrint("lalala")
end

c)在你的函数里不要使用print

function print(...)
  io.write("lalala")
end
2019-11-09 17:59:13