2016-08-07 5 views
0

ある場合は、次のコードスニペットをご覧ください:TCLキャッチ:キャッチ結果オプションで異なる-codeとレベルのリターンコードがTCL_RETURN

set catch_r [catch {  
    return -code return -level 0 "something"  
    #return -code break -level 1 "something" 
} result options] 
puts "catch result: \n$catch_r" 
puts result: 
puts $result 
puts options: 
puts $options 

出力は

catch result: 
2 
result: 
something 
options: 
-code 0 -level 1 

Iの場合でありますコメント行return -code break -level 1 "something"を使用し、出力は、私はより多くのを試してみました

catch result: 
2 
result: 
something 
options: 
-code 3 -level 1 

あるそのような異なる-level番号の-code continue又は-code errorとして3210、およびそれがreturn -code returnされていない場合options-code-levelの値がreturn -code -levelと同じであることを見出しました。

return -code return -level Nの場合、options-code 0 -level N+1であり、-code 2 -level Nではありません。なぜreturn -code returnがこのように処理されるのですかcatch?それの意味はなんですか?それは-levelオプションの値と同じ数のスタックレベルを経験してきたまで

おかげ

答えて

1

return -code Xのすべての種類は、TCL_RETURNを与えます。次に、その-code値に対応するTCL_コードを返します。 -code returnの場合はTCL_RETURNです。これはもう1つのスタックレベルを通過し、TCL_OKとなります。あなたが書いているように、return -code return -level Nreturn -code ok -level N+1 と同じです。それは設計によるものです。

ドキュメント: return

擬似コード:コマンドが実際にレベル演算を行うことはありません。

関連する問題