文章目录
本篇文章介绍的是proc这个概念,称之为过程,实现的效果相当于你创建了一个TCL的命令一样,非常类似于C语言中的函数。
pro的基本概念结构
proc add {x y} {expr $x+ $y}
如上面code所示, add作为的是这个过程的名字,xy是过程的参数列表,参数之间要用空格隔开,接着用花括号{ }
代表过程体。proc从而生成了一个新的cmd,可以像cmd一样来调用他。注意有两个花括号,第一个是传递参数变量,第二个是proc的实体。
局部变量和全局变量:
在所有过程之外定义的变量称之为全局变量,而在proc内部定义的变量我们称之为局部变量,二者可以同名。全局变量的作用域是它所在的过程的内部,全局变量的作用域则不包括所有过程的内部,这里和C很不一样。用现实生活举一个例子,就相当于一个国家里面又有一个国家,相当于国中国一样,你不管我,我不管你。
如果在proc,也就是局部里面想要调用一下全局的变量的值,就在局部前面声明为global,好比要在里面的小国家借用大国家的东西,就需要在自己小国家,声明这个变量是全局的,所有国民都可以用。
TCL中的特殊参数形式;
没有任何参数的过程, 或者缺省参数
proc add {} {expr 2+3}
上面,我就不提供任何参数,当我敲击add的时候就直接返回5
或者说我们可以设置一个default值
如上图所示,var2的默认值是2,var3的默认值是3 var1没有设置默认值
可变个数的参数
上图包含的知识比较多,一个是proc的用法,以及args的用法,另外还有foreach的用法。
args就是一个关键词变量,代表一个list,但是这个list里面的东西我不知道,反正就是一个可变的list类型的变量值。
因此
定义一个过程叫add的过程,然后,参数有va1 和一个list参数,具体有多少个,我不知道。以后看到args就应该知道这个是一个可变的list变量。
然后set 局部变量sum等价于val1
开始执行foreach,变量为i,每次i从args这个list变量里面取一个值,就执行一下body的执行体,将args里面的值赋值给sum变量,最后返回最终的sum
然后自己推一下,就知道上面为什么等于2和20了。
感谢,参考:https://www.cnblogs.com/chip/p/5866689.html