return命令可以在source命令中执行,当source运行一个脚本,return命令可以使脚本的运行立刻停止,result将作为source的结果返回。
当一个过程想指出它接收到了一个错误的变元,使用return -code error加上result去设置一个合适的错误消息,其它return -code的用法一般都是执行一个新的控制结构。
return -code命令可以在source命令中执行,当source运行一个脚本,return -code命令可以使脚本的运行立刻停止,return -code中的code将作为source的结果返回。
上文中所述的-code可选项会被Tcl特殊处理,下面的其它的可选项也会被Tcl特殊处理。它们是:
一些Tcl的内建命令会对这些异常进行特殊处理,例如,在循环中, while、for和foreach这三个命令在循环体重运行命令,如果在循环体中出现了返回代码为TCL_BREAK或TCL_CONTINUE,循环命令将会重新执行,就相当于一个break或continue命令在循环中的作用。
proc printOneLine {} { puts "line 1" ;#这行将会打印 return puts "line 2" ;#这行不会打印 }
使用return来返回值:
proc returnX {} {return X} puts [returnX] ;#打印"X"
使用return -code error来汇报错误变元:
proc factorial {n} { if {![string is integer $n] || ($n < 0)} { return -code error / "expected non-negative integer,/ but got /"$n/"" } if {$n < 2} { return 1 } set m [expr {$n - 1}] set code [catch {factorial $m} factor] if {$code != 0} { return -code $code $factor } set product [expr {$n * $factor}] if {$product < 0} { return -code error / "overflow computing factorial of $n" } return $product }
代替break命令:
proc myBreak {} { return -code break }
使用-level 0可选项,返回自己本身,可以替代break命令:
interp alias {} Break {} return -level 0 -code break
使用catch命令来捕获return -options返回的错误:
proc doSomething {} { set resource [allocate] catch { # Long script of operations # that might raise an error } result options deallocate $resource return -options $options $result }
使用return可选项来创建一个过程替代return命令本身:
proc myReturn {args} { set result "" if {[llength $args] % 2} { set result [lindex $args end] set args [lrange $args 0 end-1] } set options [dict merge {-level 1} $args] dict incr options -level return -options $options $result }