2012-05-30 4 views

답변

5

error 명령은 현재 시점에서 오류가 발생합니다. 프로 시저의 내부 상태로 인해 문제가 발생하는 경우에 유용합니다. return -code error 명령을 입력하면 해당 프로 시저가 오류를 생성합니다 (예 : error 인 경우). 프로 시저에 전달 된 인수에 문제가있는 경우 (예 : 호출자가 잘못 처리 한 경우)에 유용합니다. 차이점은 스택 추적을 살펴볼 때 실제로 발생합니다. 차이는 함정에 절차 내`catch` 두 개의 서로 다른 경우에 사용하는 경우도 있습니다

proc getNumberFromFile {filename} { 
    if {![file readable $filename]} { 
     return -code error "could not read $filename" 
    } 
    set f [open $filename] 
    set content [read $f] 
    close $f 
    if {![regexp -- {-?\d+} $content number]} { 
     error "no number present in $filename" 
    } 
    return $number 
} 

catch {getNumberFromFile no.such.file} 
puts $::errorInfo 
#could not read no.such.file 
# while executing 
#"getNumberFromFile no.such.file" 

catch {getNumberFromFile /dev/null} 
puts $::errorInfo 
#no number present in /dev/null 
# while executing 
#"error "no number present in $filename"" 
# (procedure "getNumberFromFile" line 9) 
# invoked from within 
#"getNumberFromFile /dev/null" 
+0

,하지만 훨씬 더 복잡 점점 : (! 고안) 여기

은 예입니다. –

+1

아마도 Tcl 8.5의'return'에서 스택 위의 어딘가에서 에러를 발생시키는'-level' 옵션을 배웠기 때문에 아마도 커스텀 복합 명령을 구현할 때 (보통 DSL을 형성하는 척하는)). '오류'는 그렇게 할 수 없습니다. – kostix

관련 문제