Tcl中不那么简单的return命令

风行水上 @ 2011-12-05 18:45:27
标签:

    和其它Tcl命令一样,Tcl中的return不是语法,只是一个命令,而且比其它程序语言中的return要“复杂”得多。

    -level

    看看下面的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 : 正常情况下的return
    • return -level 2 : 可以直接从调用函数返回,儿子可以控制老子了
    • return -level [info level] : 可以直接返回到顶层了

    -level选项只有在Tcl 8.5版本以后中才存在。

    标签:

      分享到:
      comments powered by Disqus

      24/27ms