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