【Tcl学习笔记】第8章 流程控制

8.1 if

命令:if test1 body1 ?elseif test2 body2 elseif ...? ?else bodyn?
作用:将test作为表达式处理。如果为真,将body作为Tcl脚本处理,返回它的值。

  • 对if和其他控制结构获取的表达式和脚本所用的解析方法与对Tcl所有命令的所有参数所用解析方法相同,建议总是把表达式和脚本放在大括号中,这样再命令执行前不会有替换发生。
  • 注意换行符是命令分隔符,所以每个左大括号必须与它的前一个单词位于同一行。
  • 回顾大括号引用:如果一个单词以左大括号开头,那么直到与它匹配的右大括号为止,所有字符都将被原封不动地识别为这个单词的值。这个单词中不会发生任何替换,所有的而空格、制表符、换行符以及分号都作为普通字符处理。
if {test1} {
    body1
} elseif {test2} {
    body2
} ...    {...}   {
    ...
} else           { 
    bodyn
}

8.2 switch

命令:

  • 形式一:switch ?options? string {pattern body ?pattern body ...?}
  • 形式二:switch ?options? string pattern body ?pattern body ...?

作用:把string和各pattern进行匹配,知道找到一个匹配的pattern,然后执行它后面对应的body。返回执行改body的结果,如果没有匹配的pattern,则返回空字符串。options可以是-exact、-glob、-regexp或–(用来代表选项结束)
形式一:

switch $x {
    a {incr t1}
    b {incr t2}
    c {incr t3}
}

形式二:

switch $x \
    a {incr t1} \
    b {incr t2} \
    c {incr t3}

可见,形式一可以很方便的和对应的脚本写成多行格式。

switch的匹配模式:

  • -exact(默认):严格的字符串比较。
  • -glob:string match命令下的匹配。
  • -regexp:正则表达式匹配。
set t1 0 
set t2 0
set t3 0
foreach i $x {
    switch -regexp -- $i {
        a           {incr t1}
        ^[0-9]+$    {incr t2}
        default     {incr t3}
    }
}
  • 模式default可以与任意值匹配。
  • --来标记选项的结束,避免以-开头的检测值被误认为选项。
  • 如果某个模式的body与下一模式相同,可用-代替。
  • 注意注释不能加在大括号内。

8.3 循环命令:while、for、foreach

命令:while test body
作用:若表达式test的值为真,将body作为Tcl脚本运行。重复这个过程知道test为假。

命令:for init test reinit body
作用:将init作为一个脚本运行,然后将test作为一个表达式处理。如果test的值为真,将body作为Tcl脚本运行,然后将reinit作为Tcl脚本运行,然后将test作为表达式处理。重复这个过程直到test的值为假。

命令:

  • 形式一:foreach varName list body
  • 形式二:foreach varlist1 list1 ?varlist2 list2 ...? body
    作用:把变量varName按顺序设置为list中的每一个元素,然后将body作为Tcl脚本运行。返回一个空字符串。list必须是有效的Tcl列表。
set b {}
set i [expr {[llength $a] - 1}]
while {$i >= 0} {
    lappend b {lindex $a $i}
    incr i -1
}
set b {}
for {set i [expr {[llength $a] - 1}]} {$i >= 0} {incr i -1} {
    lappend b {lindex $a $i}
}
set b {}
foreach i $a {
    set b [linsert $b 0 $i]
}

8.4 循环控制:break与continue

  • break命令引起最内层循环的命令立即终止循环。
  • continue命令只终止最内层循环的当前迭代步。

8.5 eval 命令

  • 用于创建和运行Tcl脚本的通用构造块,与matlab中eval命令功能一致。
set reset {
    set a 0
    set b 0
    set c 0
}
eval $reset

8.6 从文件运行

source命令读取一个文件,将其作为Tcl脚本运行。source获取一个参数,该参数指定要读取的文件名。

source init.tcl

source的返回值就是运行文件内容的返回值,即文件中命令最后一条命令的返回值。另外,source运行在文件中使用return命令终止进程。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lu-ming.xyz

觉得有用的话点个赞吧 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值