Lua `string.find` 声称第一个参数为 nil,但实际上它是一个字符串

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

我在 Lua 中遇到了一个非常奇怪的问题(?)。

我希望

string.find
能够正常运行,因为它请求第一个参数的字符串,而我给了它一个。相反,它抛出一个运行时错误,声称它的第一个参数应该是一个字符串,而不是 nil,而我传递的参数实际上是一个字符串。

function Tokenize(source)
      local tokens = {}
      for i = 1, #source do
            local char = string.sub(source, i, i)

            if not CharIsWhitespace(char) then
                  print(source) -- string prints normally
                  print(type(source)) -- 'string', as expected
                  local chunk_start, chunk_end, chunk = string.find(source, "%S+", i)
                  -- more code...
顺便说一句,

source
是一个字符串。但是当调用这个函数时,这是输出:

C:\Program Files (x86)\Lua\5.1\lua.exe: dialog.lua:60: bad argument #1 to 'find' (string expected, got nil)
stack traceback:
        [C]: in function 'find'
        dialog.lua:60: in function 'Tokenize'
        dialog.lua:133: in main chunk
        [C]: ?

我使用 Lua 5.1 来获得此输出,但我对其进行了测试,Lua 5.3 产生了相同的结果。我发现(哈哈)这种行为很奇怪。我不知道我是否犯了一个不起眼的错误,或者这只是 Lua 的错。

lua runtime-error
1个回答
0
投票

简单的错误。我忘记在模式两边加上括号。我不知道为什么会犯这个错误,它把我引向了一个非常错误的方向。

© www.soinside.com 2019 - 2024. All rights reserved.