почему следующий код не дает никаких результатов? - PullRequest
0 голосов
/ 09 ноября 2019
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. Нет вывода отображается. Может ли кто-нибудь дать мне знать, как решить эту проблему?

1 Ответ

0 голосов
/ 09 ноября 2019

Вы реализовали бесконечную рекурсию

Функция print вызывает сама себя. Поэтому, когда вы вызываете print, ваша программа в первый раз оказывается в ловушке бесконечной рекурсии. В какой-то момент ваша программа потерпит крах, потому что ваш стек заполнен.

Вы не увидите никакого вывода, потому что переписали стандартную функцию Lua print. Следовательно, ваша функция не может создать вывод на консоль.

printResult = ""

-- the following code defines a print function that calls itself 
function print(...)
  for i,v in ipairs(arg) do
      printResult = printResult .. tostring(v) .. "\t"
  end
  printResult = printResult .. "\n"
  -- here you call the function you're just defining
  print(printResult)
end
-- here you call print the first time which will call itself again and again...
print(...)

Некоторые решения:

a) не вызывать вашу функцию print, поэтому вы все равно можете вызывать Lua's print

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

b) создать новую ссылку на Lua print, перед тем как создать новую ссылку print на вашу функцию

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

c) не использовать printвнутри вашей функции

function print(...)
  io.write("lalala")
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...