5
return -code error ...
과 error ...
을 통해 TCL에서 예외를 발생시키는 것과 실제로 다른 점은 무엇입니까? 언제 다른 하나 대신 사용됩니까?리턴 코드 오류와 오류의 차이점
return -code error ...
과 error ...
을 통해 TCL에서 예외를 발생시키는 것과 실제로 다른 점은 무엇입니까? 언제 다른 하나 대신 사용됩니까?리턴 코드 오류와 오류의 차이점
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"
,하지만 훨씬 더 복잡 점점 : (! 고안) 여기
은 예입니다. –
아마도 Tcl 8.5의'return'에서 스택 위의 어딘가에서 에러를 발생시키는'-level' 옵션을 배웠기 때문에 아마도 커스텀 복합 명령을 구현할 때 (보통 DSL을 형성하는 척하는)). '오류'는 그렇게 할 수 없습니다. – kostix