我想知道如何在tcl中实现GOTO。 我正在写一个测试案例,我说了5个步骤。 如果我的第1步失败了,我不想继续前进,我想跳过现有的东西并转到一个常见的清理部分。
如果tcl中有任何GOTO命令,请帮助我。
谢谢, 拉姆亚。
答案 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
}
}