我正在使用Notepad ++,并希望使用“在文件中搜索”和“常规表达式”来查找某些Lua文件,否则我将无法获得错误。
在我的文件中,我有这样的功能:
function NameOfFunction()
--ToDoOrNotToDodo
end
我有这样的线程启动功能:
StartThread(NameOfFunction, value,value..)
现在,如果函数名拼写错误,或者函数出现错误,我只会得到一条消息,即使用了一些nil-value来尝试启动一个线程。没有床单,没有脚本文件。因此,正则表达式的救援。
现在我对正则表达式的想法就是这个
\s*StartThread\(\s* [CaptureTheNameAndSave],
并且当且仅当没有相应的
时才使其成为匹配 \s*function\s*[CaptureTheNameAndSave]\s*(
找到。
答案 0 :(得分:4)
为什么不直接解决问题,而不是制作复杂(或不可能)的正则表达式?
local oldStartThread = StartThread
function StartThread(func, ...)
assert(func)
return oldStartThread(func, ...)
end
这将使用一个包装器替换StartThread函数,该包装器会立即检查是否存在函数,如果为零则返回错误,从而为您提供良好的回溯。
答案 1 :(得分:0)
正如@ColonelThirtyTwo指出的,为什么正则表达式?创建一个函数,执行所需的所有检查并捕获线程中的错误:
function safeStartThread(func, arg1, arg2)
-- check func isn't nil
if func == nil then
error('thread func cannot be nil')
return
end
-- create wrapper to trap exceptions in func:
function trapper()
local stat, errMsg = pcall(func, arg1, arg2)
if stat then -- handle error
print(errMsg) -- or whatever handling
end
end
-- start thread:
StartThread(trapper)
end
如果你想获得错误发生的行号等,你可以使用xpcall而不是pcall。