2

我正在为 vim 插件开发一个小型测试框架,并尝试实现一个调用用户指定函数的函数,并在需要时检查该函数是否调用异常。我遇到的问题是我无法让 vim 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 子句中,这个函数就可以正常工作

catch /E740/
或其他什么,但它不会插入传入的变量。我尝试在“执行”字符串中执行整个块,但这似乎也不起作用。

到目前为止,我已经提出了这个问题,并允许它捕获任何异常并相信调用者理解这种一般测试的局限性。

那么,有没有人知道如何解决这个问题,或者,有没有人知道一种方法来确定在它被捕获后引发了哪个异常,以便我可以将它与事后的论点进行比较?

4

2 回答 2

2
于 2013-09-15T10:21:43.243 回答
0

吉姆·斯图尔特,这是完美的解决方法。我现在有类似的东西


function! TestException(fx, arguments, exception)
    let Fx = function(a:fx)
    try
        call call(Fx, a:arguments)
    catch
        if match(v:exception, a:exception) >= 0
             return 1
        else
             throw v:exception
        endif
    endtry
    return 0
endfunction

Vim 不喜欢您手动抛出 Vim 异常,但它仍然让用户知道何时抛出了另一个预期之外的异常。不敢相信我没有注意到 v:exception。

于 2013-09-15T03:53:47.563 回答