2013-09-16 3 views
1

У меня есть следующие 3 функции:Run терпит неудачу во время отладки нормально

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' 

Что может вызвать такую ​​разницу между отладкой и запуском?

ответ

1

Я предполагаю, что если вы не находитесь в режиме отладки, вы скомпилируете свой код и отлаживаете информацию об отладке, поэтому debug.getinfo(1).source не является именем файла (и не содержит символа /). Попробуйте распечатать его значение в функции currentDir().

+0

Я не думаю, что здесь проблема, я думаю, что интерпретатор автоматически конвертирует все '/' в '\', так как я строю из Windows. – user2779657

+0

Возможно, мое предварительное объяснение того, почему в имени файла отсутствует '/', неверно, но проблема * конечно * в том, что в имени файла нет '/'. Сделайте то, что я сказал: добавьте 'print (string)' после строки 'local string = debug.getinfo (1) .source'. Другая возможность заключается в том, что вы работаете из каталога, в котором находится исходный файл ... – catwell

+1

Во всяком случае, * * * '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' '(потому что, как говорится в сообщении об ошибке,' last' является 'nil'). – catwell

Смежные вопросы