tcl/tk之流程控制命令

摘要:
{seti{expr{[llength$a]-1}}}}{$i>foreach{xy}{{abcde}{put“<”}=>Foreach还可以并行处理多个列表&lt:$i>&lt,b>j;&书信电报;z>k、 &lt:>setreset{seta0 setb0 setc0}。。。Eval$重置;

作为学习笔记,写下来仅供自己查阅。

tcl脚本命令风格有些类似linux命令,比较古老和原始的语言,学过linux的看起来应该毫无压力

if 命令

if {$x < 0} {

    set x 0

}

 

if {$x < 0} {

    ...

} elseif {$x == 0} {

    ...

} elseif {$x == 1} {

    ...

} else {

    ...

}

每一个左大括号都必须在它的前一个单词的同一行,因为换行符就是命令分隔符。下面这段脚本就会被解析为两个命令,报告if命令因参数不足而报错:

if {$x < 0}

{

    ...

}

 

switch 命令:

switch $x {

    a {incr t1}

    b {incr t2}

    c {incr t3}

    default {incr t4}

}

 

while 命令:

倒转列表元素书序程序如下:

set b {}

set i {expr {[llength $a] - 1}}

while {$i > 0} {

    lappend b {lindex $a $i}

    incr i -1

}

 for循环 实现如下:

set b {}

for {set i {expr {[llength $a] - 1}}} {$i >= 0} {incr i -1} {

    lappend b [lindex $a $i]

}

 

 foreach命令 实现:

set b {}

foreach i $a {

    set b [linsert $b 0 $i]

}

foreach 命令也接受变量名列表:

foreach {x y} {a b c d e} {

    puts "<$x>,<$y>"

}

=><a><b>

  <c><d>

  <e><>

 

foreach 还可以并行处理多个列表:

foreach i  {a b} {j k} {v w x y z} {

    puts "i:<$i>,j:<$j>,k:<$k>"

=>i:<a>,j:<v>,k:<w>

  i:<b>,j:<x>,k:<y>

  i:<>,j:<z>,k:<>

 

循环控制: break 与 continue

这两个命令与c语言中对应的语句相同,都不需要任何参数。

 

eval 命令:

用于创建和运行tcl脚本的通用构造块。它接受任一多个参数,把它们用分隔符串接起来,然后把串接的结果作为一个tcl脚本处理。

set reset {

    set a 0

    set b 0

    set c 0

}

...

eval $reset

又如:

set vars {a b c d}

eval unset $vars

串接 unset $vars 参数后结果为

unset {a b c d}

然后把以上语句作为一个tcl脚本执行,结果清除a b c d四个变量。

 

source 命令:

读取一个文件,将其内容作为tcl脚本运行。

一个参数,该参数指定要读取的文件名。例如:

source init.tcl

改命令运行init.tcl文件的内容。可以用绝对路径或相对路径。

source 的返回值就是文件内容的返回值,即文件中最后一个命令的返回值。

另外source允许在文件内的脚本中使用return命令终止过程。

使用source命令,可以将一个大的脚本分为小的模块,又一个主脚本用source调用其他的脚本模块。

可以通过把过程定义放到一个文件中,把可重用的过程建立成库。

免责声明:文章转载自《tcl/tk之流程控制命令》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇阿里云田涛涛:高效智能的云,CloudOps 让运维更简单.NET 数据类型之字符串(String)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

将 Spring boot 项目打成可执行Jar包,及相关注意事项(main-class、缺少 xsd、重复打包依赖)

最近在看 spring boot 的东西,觉得很方便,很好用。对于一个简单的REST服务,都不要自己部署Tomcat了,直接在 IDE 里 run 一个包含 main 函数的主类就可以了。 但是,转念一想,到了真正需要部署应用的时候,不可能通过 IDE 去部署啊。那有没有办法将 spring boot 的项目打包成一个可执行的 jar 包,然后通过 ja...

FineUI使用记录

@{ ViewBag.Title = "Grid/Grid"; var F = Html.F();} @section body { @(F.Grid().IsFluid(true).CssClass("blockpanel").Title("表格").ShowHeader(true).ShowBorder(true).ID("Grid1").DataI...

WebService 的Description 属性说明(转)

转自:http://exception.thinksaas.cn/0/173/173623.html  在WebMethod的description 中可使用超文本, 举例: 如上图中,红框类的WebService的接口说明是如何实现的?1、加粗字体的标题2、换行3、链接4、图标 这是服务接口http://www.webxml.com.cn/WebSer...

HDU-2647 Reward(链式前向星+拓扑排序)

Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16602 Accepted Submission(s): 5308 Problem Description Dandelion's unc...

log4j简介及应用

一、介绍  Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。 Log4j由三个重要的组件构成:日志信息...

mysql8.0 初始化数据库及表名大小写问题

删除DATA文件夹 rm -rf /var/lib/mysql 重新初始化并启动MYSQL mysqld --initialize --console --lower-case-table-names=1 chown -R mysql:mysql /var/lib/mysql/ systemctl start mysqld systemctl status...