和其它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
: 相当于 break
return -level 1
: 正常情况下的returnreturn -level 2
: 可以直接从调用函数返回,儿子可以控制老子了return -level [info level]
: 可以直接返回到顶层了-level
选项只有在Tcl 8.5版本以后中才存在。