和其它Tcl命令一样,Tcl中的return不是语法,只是一个命令,而且比其它程序语言中的return要“复杂”得多。
看看下面的Tcl程序会输出什么结果呢?
proc f_a {} {
for {set i 1} {$i<10} {incr i} {
puts $i
f_b $i
}
}
proc f_b {v} {
if {$v > 4} {return -level 2}
}
f_a
结果不是打印1到9,而只打印到了5,程序就退出了。
问题就是那个不普通的-level选项。通过这个选项可以使得return命令不再那么简单:
return -level 0 : 相当于 breakreturn -level 1 : 正常情况下的returnreturn -level 2 : 可以直接从调用函数返回,儿子可以控制老子了return -level [info level] : 可以直接返回到顶层了-level选项只有在Tcl 8.5版本以后中才存在。