语言简介

TCL是一种很通用的脚本语言,功能强大。最早称为“工具命令语言”“Tool Command Language”,但是目前已经不是这个含义,不过我们仍然称呼它TCL,发音为"tickle”。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。

实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。它有一个简单的语法和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可以使你扩充(定义新的过程)的库函数。应用程序可以产生Tcl命令并执行,命令可以由用户产生,也可以从用户接口的一个输入中读取(按钮或菜单等)。但Tcl库收到命令后将它分解并执行内建的命令,经常会产生递归的调用。

Tcl数据类型简单。对Tcl来说,它要处理的数据只有一种——字符串。Tcl将变量值以字符串的形式进行存储,不关心它的实际使用类型。内嵌的Tk(toolkit)图形工具可以提供简单而又丰富的图形功能,让用户可以轻松的创建简单的图形界面。

Tcl的执行是交互式的,Tcl提供了交互式命令界面,界面有两种:tclsh和wish。tclsh只支持Tcl命令,wish支持Tcl和Tk命令。通过交互界面,我们就可以象执行UNIX shell命令一样,逐条命令执行,并即时得到执行结果.

Tcl/Tk可以提供跨平台的支持。Tcl语言可以运行于绝大多数当今流行的UNIX、WINDOWS和Macintosh等系统上,而且命令通用,只是启动的细节有些不同。

基本语法

 1、**命令结构**:commandName arguments。每条命令之间通过换行或者;隔开。例如:set foo 0set bar 1;
2、**注释**:使用#注释,不过要注意的是下面的注释是错误的:set foo0 #这个是注释(错误)因为tcl解析器总是认为一条命令应该以换行或者分号结束,其他的在同一行中都认为是参数。所以正确的应该是:set foo 0;  #这个是注释

其实对于习惯于编译型编程语言的人来说每行末尾加个;应该是理所当然的事情,所以这个对我们应该没有什么不习惯的。

  3、数据类型:tcl不支持其他语言中的形如int, double ,char等等类型,唯一支持的就是string类型。也就是说一个变量可以在不同的时刻理解为不同的类型。
4、变量:tcl可以定义两种类型的变量,变量和数组。变量:在tcl变量不需要声明就可以直接赋值。给变量赋值的例子:set ba 1;set ma “qian lifeng”; #加引号的作用是为了告诉编译器包括空格取得变量的值可以在对应的变量名前面加$来取得,例如:puts $ba;  #表示打印出ba的值数组:数组也不需要声明,直接赋值,例如:set qian(0) 1;set qian(1) 2;一个比较有意思的地方是数组下标可以不按照顺序来写,也不一定是数字,可以是字符串。例如:set qian(123) f;set qian(6789)fs;set qian(good)yes;我们可以使用puts $qian(123); 的形式来获得数组的内容。当然tcl数组也支持多维数组,声明形式为:setqian(1,1,1,1,1) fs; #随便多少维如果我们要查看某个已经赋值的数组的信息,可以使用parray命令:如:parray qian;   #将打印出qian数组的所有信息
 5、字符串操作:string 命令基本语法如下(这里的string1,string2可以是字符串也可以是变量,option是下列选项之一)。stringoption string1 string2;option的操作选项:compare按照字典的排序方式进行比较。根据string1 <, =, >string2分别返回-1, 0, 1first返回string2中第一次出现string1的位置,如果没有出现string1则返回-1last和first相反trim从string1中删除开头和结尾的出现在string2中的字符tolower返回string1中的所有字符被转换为小写字符后的新字符串toupper返回string1中的所有字符串转换为大写后的字符串length返回string1的长度例子:string length$qian;  #将返回变量qian的长度
6、数字操作:因为tcl中只有一个string类型的变量,所以当要操作数字进行运算的时候,tcl提供了incr和expr两个操作数。incr的基本用法为:incrvariable integer(variable必须为数字)例如我要将一个数字加3set a 3;incr a 3;  #将a加3,如果要减3,则为 incr a–3;默认的incr a等同于a++的意思,即本身自增1。expr的基本语法为:expr functionnumberexpr是为了提供更加复杂的操作而设计的一个语法,比如运算乘除法等等。在执行算术操作的时候必须将expr命令放在算术操作之前。例如:set a 20; set b4;set c [expr$a/$b];  #此时的c的值为5除此之外,expr还能够识别一些函数及其返回值如下:abs(x) x的绝对值round(x) x舍入后得到的整数值sin(x) x的正弦…………………………………..举个例子:set a [exprsin(0.3)]; #计算0.3的正弦
7、转义在tcl中可以使用{}将需要转义的字符串括起来。例如:set a 5;set b {$a};  #此时b的值为”$a“,而不是5。
8、流控制if控制流,基本语法:if { 表达式 } {#运算;} else {#其他运算;}需要注意的是if….else, if……elseif…中的else,elseif必须要和if的后面一个{在同一行。switch控制流:基本语法:switch $x {数值1 { 操作1 ;}
数值2 { 操作2 ;}}
9、循环tcl提供三种循环命令,分别为:for,foreach,while。此外tcl还提供两个循环控制命令。注意:这个三个命令中的程序块的开始花括号必须要和三个命令同一行。1、while基本语法:while {条件} { 程序块 }2、foreach将在一组变元中进行循环,并且每次都将执行他的循环体。基本结构:  foreachvariable {items} {block}这里的variable是变量的名字,便于block中使用。举例:foreach element{0 m n b v} {switch$element {# 判断element的值}}3、for是最常用的循环。其基本结构为:for{initialization} {condition} {increment} {body}例如:for {set i 0} {$i< 10} {incr i} {puts $i;}  #将打印出0到9

程序示例

#add a member function call "greet"
Class mom
mom instproc greet {} {$selfinstvar age_puts"$age_ year old mom say: How are you doing?"
}#Create a child class of "mom" called"kid"
#and overide the member function "greet"
Class kid -superclass mom
kid instproc greet {} {$selfinstvar age_puts"$age_ year old kid say: What's up, dude?"
}#Create a mom and a kid object, set each age
set a [new mom]
$a set age_ 45
set b [new kid]
$b set age_ 15#Calling member function "greet" of eachobject
$a greet
$b greet

TCL脚本语言详解(1)相关推荐

  1. SpringBatch处理器ScriptItemProcessor执行脚本语言详解

    目录 ScriptItemProcessor介绍 ScriptItemProcessor方法和属性介绍 ScriptItemProcessor实战 ScriptItemProcessor介绍 脚本语言 ...

  2. FLASH脚本语言详解

    - Go to 跳转到指定的帧 - Play 播放 - Stop 停止 - Toggle High Quality 在高画质和低画质间切换 - Stop All Sounds 停止所有声音的播放 - ...

  3. 【elasticsearch】Elasticsearch 7.X Scripting 脚本使用详解

    1.概述 转载:Elasticsearch 7.X Scripting脚本使用详解 0.题记 除了官方文档,其他能找到的介绍Elasticsearch脚本(Scripting)的资料少之又少. 一方面 ...

  4. 有向图邻接矩阵c语言编程,邻接矩阵有向图(一)之 C语言详解

    本章介绍邻接矩阵有向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实 ...

  5. 邻接矩阵用c语言,邻接矩阵无向图(一)之 C语言详解

    本章介绍邻接矩阵无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实 ...

  6. Drools 规则语言详解(上)

    http://www.blogjava.net/guangnian0412/archive/2006/06/09/51574.html http://www.blogjava.net/guangnia ...

  7. fofa自动化爬虫脚本更新+详解

    fofa自动化爬虫脚本更新+详解 起因 最近要用到fofa爬虫,为什么要用爬虫不用api,问就是穷,想起来之前写过一个相关的脚本:Fofa-python-脚本,是很久以前写的了,之前写的时候有点问题, ...

  8. php事务 面向对象,PHP面向对象之事务脚本模式(详解)

    如下所示: /* 事务脚本模式: 类似于thinkphp中的model层,或者说就是操作数据库的类. 个人觉得实践中使用起来还是挺简单方便的,就是SQL语句写死了的话,灵活性就不够. 示例代码如下: ...

  9. rcs开机启动mysql_linux添加开机自启动脚本示例详解-阿里云开发者社区

    linux添加开机自启动脚本示例详解 double2li 2017-04-14 1652浏览量 简介: linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的;一.在/etc/r ...

最新文章

  1. CentOS 7.4搭建Kubernetes 1.8.5集群
  2. nginx平滑升级make upgrade出错的解决办法
  3. 【算法分析与设计】浅析算法复杂度
  4. 计组之数据运算:11、浮点数的运算
  5. 终于等到了scilab 5.1.1
  6. .Net读取rss的两种方法
  7. 【白皮书分享】2020用户生命周期运营白皮书2.0.pdf(附下载链接)
  8. 结构化方法与面向对象方法应用比较
  9. Spring Cloud Config服务器
  10. 基于java的企业人事管理系统的设计与实现(含源文件)
  11. 呼叫中心语音外呼营销系统软件成企业首选
  12. 「案例」让房东在 Airbnb 上展示他们的热情好客
  13. Cocos游戏打包apk
  14. 金彩教育:高转化详情页怎么优化
  15. ssms mysql_SQL Server Management Studio(SSMS)复制数据库的方法
  16. MAC系统查看端口,并关闭端口占用
  17. 如何查询mysql的url_如何查看数据库的url
  18. 超链接标签 a (锚点链接)
  19. poi画饼图、折线图等图表和设置颜色字体等
  20. 风险预测模型_慢性肾脏病孕妇妊娠风险预测模型的构建及验证

热门文章

  1. python 抢票代码 猫眼演出_Python爬虫-猫眼电影排行
  2. 从Qualcomm技术看loT未来发展方向
  3. c语言李白喝酒答案,李白嗜酒文言文答案
  4. 导出模型中顶点与其对应的uv坐标
  5. 2022.1.10第六天笔记
  6. 大数据软件应用举例商圈分析城市管理
  7. AX6路由器开SSH、固化、刷openwrt
  8. Kibana使用(Discover):数据的查询
  9. python小白从哪来开始-如何看待Python的由来?Python小白如何入门?(附教程)
  10. JavaScript冷门知识