我有以下3个功能:
function getName() -- returns filename without ext
local files = scandir(currentDir())
local name = nil
for i = 1, #files do
if isValidExt( getExt(files[i]) ) then
name = getFilename(files[i])
break
end
end
return name
end
function currentDir()
local string = debug.getinfo(1).source
local endPoint = getLastOcurrence(string, '/')
local dir = string.sub(string, 2, endPoint)
return dir
end
function getLastOcurrence(str, char)
local last = string.find(string.reverse(str), char, 1, true)
return #str - last
end
奇怪的是,调试结束没有问题,而运行时会出错:
...\Downloader.lua:22: attempt to perform arithmetic on local 'last' (a nil value)
stack traceback:
...\Downloader.lua:22: in function 'getLastOcurrence'
...\Downloader.lua:39: in function 'currentDir'
...\Downloader.lua:50: in function 'getName'
什么可能导致调试和运行之间的这种差异?
答案 0 :(得分:1)
我的猜测是,当您处于调试模式时,您需要编译代码并去除调试信息,因此debug.getinfo(1).source
不是文件名(并且不包含/
字符)。尝试在currentDir()
函数中打印其值。