file: write () error: «неверный аргумент №1 для« write »(ожидаемая строка, полученная ноль)» - PullRequest
1 голос
/ 06 ноября 2019
local log = io.open("log.txt","a")
local logText

for i=1,8 do --in case you claim this is pointless, it's here because it might affect the outcome and it has a use in other places of my program
  if a == 1 then --throwaway variable for this example
    press = 4; logText = "A = 1."
  else
    press = 8; logText = "No other rules apply."
  end

  if i == 8 then
    log:write(logText)
    log:write("\nCorrect combination: "..press.."\n") --claims error is here
    log:close()
  end
end

Второй log:write() выдает ошибку (bad argument #1 to 'write' (string expected, got nil)), утверждая, что у него нет строки, когда я передаю ее непосредственно в функцию, и это меня раздражает. Тем не менее, ошибка не возникает все время - в других случаях она работает отлично, по-видимому, без причины. Во-вторых, когда я вставляю в оператор if выше сказанное log:write(), теперь он думает, что ошибка находится в строке с оператором if, например:

if press ~= 0 then --claims error is here
  log:write("\nCorrect combination: "..press.."\n")
end

У меня есть несколько дубликатов этогопример кода в моей программе с различными переменными / значениями, и я убедился, что они все одинаковые несколько раз.

Какую возможную ошибку это может вызвать и почему?

1 Ответ

1 голос
/ 06 ноября 2019

Хотя это не воспроизводимо в примере из вопроса, существует вероятность того, что при использовании сценария, написанного одинаковым образом, press и logText остаются nil. Это потому, что им даны свои значения только в выбранных ветвях программы.

Попробуйте заранее назначить им "пустые" значения, чтобы избежать nil проблем с конкатенацией или io.write:

local log = io.open("log.txt","a")
local logText = ""
local press = 0

-- Rest of the logic.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...