Я работаю над небольшой платформой тестирования для плагинов vim и пытаюсь реализовать функцию, которая вызывает определенную пользователем функцию, и проверяет, вызывает ли функция при необходимости исключения. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить предложение catch vim принять строку, переданную функции тестирования.Переменная интерполяция в выводе Vimscript catch
Вот упрощенная версия того, что я хотел бы.
function! TestException(fx, arguments, exception)
let Fx = function(a:fx)
try
call call(Fx, a:arguments)
catch a:exception " Here's the problem line
return 1
endtry
return 0
endfunction
Эта функция отлично работает, если я жесткий код исключение в пункте улова
catch /E740/
или любой другой, но это не интерполировать передаваемая в переменной. Я попытался выполнить весь блок в строке «execute», но это тоже не работает.
До сих пор я опубликовал эту проблему и разрешил ей исключить любое исключение и доверять вызывающему абоненту, чтобы понять ограничение такого общего теста.
Итак, кто-нибудь знает, как это исправить, или кто-нибудь знает способ выяснить, какое исключение было выбрано после его заражения, чтобы я мог сравнить это с аргументом после факта?
Вы можете «поймать» все исключения, а затем сравнить «v: exception» с «a: exception», чтобы определить, соответствует ли тип. Ваш '/ E740 /' является регулярным выражением, возможно, подстрокой полного исключения.Если вы превратите 'a: exception' в регулярное выражение (или интерполируете его в одно), это может быть лучшим решением, но я не могу заставить его работать самостоятельно. –
Если ваше намерение - это тестовая среда для Vim, вы должны проверить [RunVimTests плагин] (http://www.vim.org/scripts/script.php?script_id=2565), который работает очень хорошо. – mMontu