2012-09-13 8 views
1

tcl에서 GOTO를 구현하는 방법을 알고 싶었습니다. 5 단계를 말한 테스트 사례를 작성 중입니다. 제 1 단계가 실패하면 더 이상 진행하고 싶지 않고 기존 작업을 건너 뛰고 일반적인 정리 섹션으로 이동하려고합니다.tcl에서 goto를 구현하는 방법

tcl에 GOTO 명령이 있으면 도와주세요.

감사합니다. Ramya.

답변

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 
    } 
} 
+0

정말 블록'goto'이 잘 제표의 표시를 얻기 위해 매우 어려운 것입니다 문제를 - 우리 동안 예외가 거품을 내뿜는 블록의 레이블을 처리 할 수 ​​있습니다. 현재 실행 컨텍스트에 있지 않은 하위 블록의 레이블은 보이지 않습니다.이 레이블이 없으면 실제로 아무데도 갈 수 없습니다. 내장 명령에 특수한 경우를 추가 할 수 있지만 언어의 정신에 반하는 것은 가능합니다. 다른 높은 수준의 구문 구조가 가능하기 때문에 'goto'가 없다는 것이 실제로별로 느껴지지 않습니다. –

+0

또는 [TAL] (http://wiki.tcl.tk/28070)을 사용하여 글을 쓸 수도 있지만, 그것은 희미한 마음이 아닙니다! –

관련 문제