错误:Lua中“ strfind”的错误参数#1(预期字符串,为nil)

时间:2019-10-12 19:33:22

标签: lua

这是代码:

local function scanwhite (str, pos)
  while true do
    pos = strfind (str, "%S", pos)
    if not pos then return nil end
    local sub2 = strsub (str, pos, pos + 1)
    if sub2 == "\239\187" and strsub (str, pos + 2, pos + 2) == "\191" then
      -- UTF-8 Byte Order Mark
      pos = pos + 3
    elseif sub2 == "//" then
      pos = strfind (str, "[\n\r]", pos + 2)
      if not pos then return nil end
    elseif sub2 == "/*" then
      pos = strfind (str, "*/", pos + 2)
      if not pos then return nil end
      pos = pos + 2
    else
      return pos
    end
  end
end

我不是经验丰富的“脚本作者”,所以我无法真正弄清楚如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

最下面的底线:

  • 问题:scanwhite(str,pos)中的'str'为零
  • 为什么?
    • 您可能编写了scanwhite()而不是scanwhite(“ something here”)
    • 您可能传递了一个空变量,而不是一个包含字符串的变量

详细答案

摘自lua 2.4手册:

strfind (str, substr, [init, [end]])
  • 方括号是可选的,方括号之外的是必需的。
  • 您的错误消息显示“期望字符串,没有nil” ,因此强制性值为空
  • 在您的代码中,substr显然不是空的(它是“%S”)
  • 通过推导,str为零值

解决方案:

local myString = "This is a string"
scanwhite(mystring)