lua попытка вызвать метод len (нулевое значение) - PullRequest
3 голосов
/ 25 апреля 2019

в моем проекте lua я получил следующую функцию:

function module.Cp1251ToUtf8(s)

  if s == nil then return nil end

  local r, b = ''
  for i = 1, s and s:len() or 0 do --the problem occurs here
    b = s:byte(i)
    if b < 128 then
      r = r..string.char(b)
    else
      if b > 239 then
        r = r..'\209'..string.char(b - 112)
      elseif b > 191 then
        r = r..'\208'..string.char(b - 48)
      elseif cp1251_decode[b] then
        r = r..cp1251_decode[b]
      else
        r = r..'_'
      end
    end
  end
  return r
end

Итак, насколько я понимаю, эта функция получает строку и преобразует ее кодировку.Иногда это работает нормально, но иногда я получаю следующую ошибку: attempt to call method 'len' (a nil value).Есть идеи, что бы это было и как это исправить?

Я пытался удалить s:len() или вставить условие типа if s != nil then ..., но оно также не сработало.

1 Ответ

3 голосов
/ 25 апреля 2019
if s == nil then return nil end

Приведенное выше отклоняет нулевые значения.Но есть и другие не-строки, поэтому подтяните чек:

if type(s) ~= 'string' return nil end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...