如何在tcl中实现goto

时间:2012-09-13 09:17:42

标签: tcl

我想知道如何在tcl中实现GOTO。 我正在写一个测试案例,我说了5个步骤。 如果我的第1步失败了,我不想继续前进,我想跳过现有的东西并转到一个常见的清理部分。

如果tcl中有任何GOTO命令,请帮助我。

谢谢, 拉姆亚。

1 个答案:

答案 0 :(得分:3)

Tcl中有没有 goto,由于相对技术原因,无法实现。

但你可以用其他方式做你想做的事情。由于您正在处理测试用例,我希望您使用tcltest包来完成工作。有了它,您可以非常轻松地指定清理代码:

tcltest::test test-1.1 "verify that the foo works" -setup {
    allocate some resources
} -body {
    whatever to do the test...
    return [our results]
} -cleanup {
    drop those resources
    make sure that we are nice and clean
} -result "the expected test result"

只需执行return即可轻松跳过测试的主体; tcltest::test命令将检测它并将其视为结果。通常最好尽量保持每个测试独立于其他测试:这样可以更容易地跟踪测试失败时出现的问题。

如果您没有使用tcltest,那么您最好还是可以使用return尽早跳过。您可以将其与try…finally…(原生在Tcl 8.6中,或与this code on the Tcler's Wiki)结合使用,以简化操作:

proc doThings {} {
    try {
        # do thing-1
        if {$no_more} return
        # do thing-2
        if {$no_more} return
        # do thing-3
        if {$no_more} return
        # do thing-4
        if {$no_more} return
        # do thing-5
    } finally {
        # do cleanup
    }
}