总有别人不曾走过的路,总有别人不曾目睹的风景......

Tcl读书笔记(十一)——过程

上一篇 / 下一篇  2012-08-03 09:46:03 / 个人分类:Tcl

1. 过程基础:proc与return
   过程由proc命令创建,示例如下:
   proc plus {a b} {
   expr {$a+$b}
   }
2. 局部和全局变量:
   当Tcl处理过程块时,它会使用与调用者不同的变量集。这些变量称为局部变量,经们仅由这个过程访问,在过程返回后就被删除。在过程之外定义的变量称为全局变量,全局变量是长期存在的,仅在明确删除后才会被消失。
   过程可以用global命令引用全局变量。
   % global x y
3. 参数变量的数目和默认设置:
   参数列表可以指定为一个空字符串。这种情况下过程不获取参数,如呆带参数地调用它会产生错误。
   参数列表实际上是列表的列表,每一个子列表对应第一个参数。如果子列表只有一个元素,那么这个元素就是参数的名称。如果子列表含有两个元素,第一个元素就是参数名,而第二个元素则是它的默认值。
   proc inc {value {increment 1}} {
expr $value+$increment
   }
   参数列表中的第一个元value,指定了名称而没有指点定默认值。第二个元素指定了名为increment的参数,并指定其默认值为1。这意味着调用incr时可以给出一个或两个参数。
   如果proc命令中没有给一个参数设置默认值,在调用过程时就必须给出这个参数。而默认参数,无论是多少个,都必须放在过程的参数列表的尾部。如果为一个特定参数设置了默认值,那么列表中它后面的所有参数都必须设置默认值。
   参数列表的第三个特殊功能支持可变数量个参数。如果参数列表中的最后一个元素是特殊名称args,那么调用过程时可以给出可变数昨个参数。args之前的参数的处理方式与前面相同,在它们之后可以再指定任意个参数。过程的局部变量args会被设置成一个列表,其元素就是这些更多的参数。如果没有更多的参数,args会设置为空字符串。
   如果过程的参数列表在args前面还有参数,它们的默认设置方式与前面所讲的相同。args不能设置默认值,它的默认值就是空字符串。
4. 传引用调用:upvar
   upvar命令提供访问当前过程上下文范围之外的变量的通用机制。可以用于访问全局变量、命名空间变量以及其它活动中的过程内的局部变量。
   % proc printArray {name} {
   %upvar $name a
   %foreach b [lsort [array names a]] {
   %puts "$b = $a($b)"
   %}
   % }
   % set info(age) 37
   % set info(position) "Vice President"
   % printArray info
   > age = 37
   > position = Vice President" 
   upvar的第一个参数是过程的调用环境可见的变量,可以是一个全局变量,也可以是一个命名空间变量。第二个参数是一个局部变量的名称。
5. 创建新的控制结要构:uplevel
   uplevel命令像是eval和upvar的结合。它把它的参数作为脚本处理。但处理脚本的变量上下文环境却不在调用堆栈层级中。
   % proc do {varName first last body} {
   %upvar $varName v
   %for {set v $first} {$v<=$last} {incr v} {
   %uplevel $body
   %}
   % }
   % set squares {}
   % do i 1 5 {lappend squares [expr $i*$i]}
   % set squares
   > 1 4 9 16 25
   % set i
   > 6
6. 应用匿名过程:
   apply命令提供了把参数集合应用于匿名过程的功能。
   apply {argList body ?namespace?} ?arg1 arg2 ...?
   apply的第一个参数是过程定义,由包含两个或三个元素的列表构成。第一个元素是过程的形式参数,定义方式与proc相同。第二个元素是实现过程块的Tcl脚本。第三个元素是可选的,如果提供,就指明运行过程的命名空间。传给apply的其他参数是赋给过程参数的值。


TAG: TCL tcl Tcl

 

评分:0

我来说两句

phoenix_lo

phoenix_lo

用户虐我千百遍,我待用户如初恋。

日历

« 2024-05-02  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 43796
  • 日志数: 23
  • 建立时间: 2011-06-12
  • 更新时间: 2012-10-30

RSS订阅

Open Toolbar