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

问题描述 投票:1回答:1

这是代码:

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

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

lua
1个回答
0
投票

最下面的底线:

  • 问题:scanwhite(str,pos)中的'str'为零
  • 为什么?
    • 您可能已经写了scanwhite()而不是scanwhite(“这里有些东西”)
    • 您可能传递了一个空变量,而不是一个包含字符串的变量

详细答案

摘自lua 2.4手册:

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

解决方案:

local myString = "This is a string"
scanwhite(mystring)
© www.soinside.com 2019 - 2024. All rights reserved.