目录

  • proc的参数
    • example1
    • example2

proc的参数

可以proc传递固定数量的参数,也可以传递数量的可变的参数传递给proc,传递给proc的参数,可以设值默认值,如需要将传递的参数a 设置默认值为12,参数与默认值一起放在大括号里即可如 {a 12}。下面举一个将三个参数传递给proc的例子:

proc justdoit {a {b 1} {c -1}} {...
}

在上面的例子中,一共传递三个参数给justdoit里,其中参数a没有设置默认值,参数b的默认值为1,参数c的默认值为-1。

你可以用三种方法调用过程:justdoit 10,它将a设置为10,b设置为默认值1,c设置为-1。justdoit 10 20同样会将b设置为20,并保留c的默认值。或者通过设置所有三个参数来调用它,以避免任何默认值。
如果最后声明的参数是单词args,proc将接受可变数量的参数。如果proc参数列表的最后一个参数是args,那么任何尚未分配给前一个变量的参数都将被分配给args。

example1

proc show_a_list {args} {set n 0foreach arg $args {puts "Argument $n: $arg"incr n}
}show_a_list A B C D
puts ""
show_a_list E F

results in:

Argument 0: A
Argument 1: B
Argument 2: C
Argument 3: DArgument 0: E
Argument 1: F

请注意,如果在带有默认值的变量后面有一个非args的变量,那么将永远不会使用默认值。例如,如果你声明了一个proc,比如:

proc function { a {b 1} c} {...}

在上面的例子中,必须传递三个参数给 proc
Tcl按照命令中列出的顺序为proc的变量赋值。如果您在调用函数时提供两个参数,它们将被赋值给a和b, Tcl将生成一个错误,因为c是未定义的。

但是,可以在具有默认值的实参后面声明其他可能没有值的实参。例如,这是有效的:

proc example {required {default1 a} {default2 b} args} {...}

在本例中,example需要一个参数,它将被赋值给required变量。如果有两个参数,第二个参数将被赋值给default1。如果有3个参数,第一个将被赋值给required,第二个赋值给default1,第三个赋值给default2。如果example被超过3个参数调用,那么第三个参数之后的所有参数都将被赋值给args。

example2

下面的示例过程定义了三个参数。调用example时,至少必须提供一个参数。第二个参数可以省略,在这种情况下,它将默认为空字符串。通过将args声明为最后一个参数,示例可以接受可变数量的参数。
还要注意return语句的使用,它显式地返回一个特定的结果。

proc example {first {second ""} args} {if {$second eq ""} {puts "There is only one argument and it is: $first"return 1} else {if {$args eq ""} {puts "There are two arguments - $first and $second"return 2} else {puts "There are many arguments:\n$first and $second and $args"return "many"}}
}set count1 [example ONE]
set count2 [example ONE TWO]
set count3 [example ONE TWO THREE ]
set count4 [example ONE TWO THREE FOUR]puts "The example was called with a varying number of arguments:"
puts "    $count1, $count2, $count3, and $count4"

Resulting output

There is only one argument and it is: ONE
There are two arguments - ONE and TWO
There are many arguments - ONE and TWO and THREE
There are many arguments - ONE and TWO and THREE FOUR
The example was called with a varying number of arguments:1, 2, many, and many"

Tcl Tutorial 笔记9 · proc 参数传递与return相关推荐

  1. Tcl Tutorial 笔记8 · proc

    目录 proc Example Advanced usage proc 在tcl中,proc与在其他的编程语言中的函数是没有差别的. proc 命令创建一个新命令.proc命令的语法是: proc n ...

  2. Tcl Tutorial 笔记1 · 输出

    目录 Simple Text Output tcl的注释 输出 puts 参考 Simple Text Output tcl的注释 命令行后进行注释使用 ;# puts "Hello, Wo ...

  3. Tcl Tutorial 笔记3 ·math

    目录 expr Operators 数字上的操作 数学函数 Type conversions 数组 example Example 1 Example 2 未完待续... expr 用于进行数学计算的 ...

  4. Tcl Tutorial 笔记10 · list

    在tcl 中列表是一个集合:列表里可以是数字,字符,字符串,或者是其他的列表. 创建列表的几种方法: 1.手动创建列表型变量 set lst {{item 1} {item 2} {item 3}} ...

  5. Tcl Tutorial 笔记 ·ubuntu命令行运行tcl 命令

    ubuntu 安装tcl : sudo apt-get install tcl 在ubuntu命令行运行tcl 命令: usually via running "tclsh" or ...

  6. Tcl Tutorial 笔记7 ·for incr

    目录 for 与 incr for 语法 Example incr Example for 与 incr for 语法 for start test next body 在这里 start 是一个对变 ...

  7. Tcl Tutorial 笔记6 ·while

    目录 while 语法 while 语法 while test {body} 在这里test 作为一个表达式,if test 条件成立将执行body中的内容,如果不成立将跳出该循环. 另外注意 tes ...

  8. Tcl Tutorial 笔记2 · set ““ {} [] \

    目录 变量赋值 set Example 替换 Substitutions "" Backslashes \ Example2 替换 Substitutions {} Example ...

  9. Tcl Tutorial 笔记5 ·switch

    目录 switch 语法规则 example 参考资料 switch 语法规则 switch ?options? string {pattern1 {body1}?pattern2 {body2}?. ...

最新文章

  1. java future用法_Java中的多线程知识点
  2. 大脑如何编码视觉信息?动态电极到图像(DETI) 映射技术也许有助于我们揭示其原理...
  3. Git_工作区和暂存区
  4. 蚂蚁算法求解tsp问题matlab,蚁群算法解决TSP问题的MATLAB程序
  5. 攻克学习多线程时碰到的难题(zz)
  6. 两个iphone怎么大量传照片_「唯物」传个视频到 iPhone,有了新方法
  7. 网站开发常用链接信息
  8. 一种基于全息投影设备的虚拟形象交互方法及系统
  9. Cross Apply 与 Outer Apply 的区别
  10. 国务院公布《关键信息基础设施安全保护条例》
  11. java.util.list 报错_cannot be cast to java.util.List
  12. 推荐下阿里巴巴开源的数据库客户端工具Chat2DB
  13. 梦泪的服务器是qq还是微信,梦泪发现微信区1奇特现象,赛季末分数远不如QQ区,看到1细节,懂了...
  14. 学习笔记 | NIPS 2021 regularization cocktail 调优的 MLPs 在表格数据上优于 GBDTs | Regularization is All Your Need
  15. android中文首字母排序,Android 实现中文按拼音排序方法
  16. 全自动调节灯光强度的实现(仿真+程序+文档)
  17. 图机器学习-图神经网络
  18. 天翼光猫虚拟服务器怎么设置,电信光猫设置经验图解手把手教你(超级详细),换光猫怎么重新设置...
  19. jquery file upload 与 uploadify
  20. docker 配置国内镜像地址

热门文章

  1. java 复制一个对象_Java如何完全复制一个对象
  2. 三角形周长最短问题_1.八年级数学:DE平分ABC的周长?怎么求DE的长?你想了很久吧?...
  3. Vue学习笔记之03v-on事件监听
  4. java记秒,Java程序获取自Java时代开始以来的秒数
  5. Csharp windowform bindingNavigator,bindingSource,DataGridView簡單分頁:首頁,上一頁,下一頁,末頁...
  6. EAR、JAR、WAR(IT)
  7. tomcat7的安装与maven安装
  8. Hibernate中的query.setFirstResult(),query.setMaxResults();
  9. Spring -- spring 和 hibernate 整合
  10. 隐藏Windows Live Messenger到系统图标栏