return -code error ...
とを介してTCLで例外を発生させることの実際の違いは何error ...
ですか?どちらがもう一方の代わりに使用されるのはいつですか?
質問する
1080 次
1 に答える
7
このerror
コマンドは、現在の時点でエラーを生成します。プロシージャの内部状態が原因で問題が発生する場合に最適です。このreturn -code error
コマンドは、配置されたプロシージャにエラーを生成させます(プロシージャがそうであったかのようにerror
)。プロシージャに渡される引数に問題がある場合(つまり、呼び出し元が何か間違ったことをした場合)に最適です。スタックトレースを見ると、実際に違いが生じます。
これが(考案された!)例です:
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"
于 2012-05-31T10:24:03.620 に答える