- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
五分钟学Tcl(还可以)
五分钟学Tcl
Concept 1: 程序是由命令(command)组成的
Tcl语言最基本的概念是:命令。程序是由一条接一条的命令构成的。举例来说,设置变量’a’为5,并且打印它的值,你写两条命令:
set a 5
puts $a
命令是以空格分隔的单词组成的。一条命令以换行符或分号(‘;’)结尾。在Tcl中,万事皆命令 – 正如你看到的那样,Tcl中并没有赋值符。要给一个变量赋值,需要用set命令,它将第一个参数所指定的变量,赋值为第二个参数所指定的值。
几乎所有的Tcl命令都会返回一个值,比如set命令返回的值就是其所赋的值。如果set命令仅指定一个参数(变量名),那么其返回值就是该变量的当前值
Concept 2: 命令替换(Command subsitution)
其次的概念是:命令替换。在一个命令中,某些参数可能出现在[ ]中。这种情况下,参数被替换成[ ]中代码的返回值。例如:
set a 5
puts [set a]
第二条命令的第一个参数,[set a],会被替换成“set a”的返回值(即 5)。在替换之后,这条命令就从
puts [set a]
转换成
puts 5
然后,它被正常执行。
Concept 3: 变量替换(Variable subsitution)
如上例,总是用set命令来引用变量值显得太冗长了些,因此Tcl早期版本就已经引入了新的变量替换的概念。如果一个变量名前面加上 $ 字符,那么它被替换成该变量的值。所以,就没有必要用
puts [set a]
而可以使用
puts $a
Concept 4: 组(Grouping)
如果命令由空格分隔的单词构成,那么如何处理包含空格的参数呢?比如:
puts Hello World
是一条不正确的语句,因为Hello和World是两个独立参数。解决方式是分组(grouping)。包含在中的文本被认为是单个参数,所以正确的语句是:
puts Hello World
命令替换和变量替换在这种分组中也是有效的,比如我可以写:
set a 5
set b foobar
puts Hello $a World [string length $b]
结果是Hello 5 World 6. 另外,转义字符如\t, \n 仍然有效.还有另一种Grouping方式,这种方式下所有的特殊字符都只有其字面含义,而不会发生变量替换。{和}之间的所有字符被认为是一个整体的参数,其中不会发生任何提环操作。所以:
set a 5
puts {Hello $a World}
会打印出 Hello $a World.
仍然是Concept 1: 万事皆命令
前面介绍了概念1:程序是由命令所组成的。事实上其含义可能超出你所想象。比如如下代码:
set a 5
if $a {
puts Hello!
}
if是一个命令,它带有2个参数。第一个参数是变量a的值,第二个参数是字串{ … puts Hello! … }。 if命令使用了Eval命令的一个特殊版本来执行参数2中的脚本(稍后会有Eval介绍),并且返回其结果。当然,你可以编写你自己的if命令,或者其他的控制结构。你甚至可以重定义if本身,并且给它增加一些功能!
Concept 5: 一切皆字串,没有类型(Everything is a string - no types)
下面的代码能够按照你想象的方式正确运行:
set a pu
set b ts
$a$b Hello World
是的,在Tcl语言中一切都发生在运行时,并且是动态的:它是一种“迟绑定” (late binding)语言,并且没有数据类型。命令名并不是特殊类型,仅仅是字符串而已。数值也只是字符串,Tcl代码也是(还记得我们给if命令传递的字符串,做为它的第二个参数吗?)。在Tcl中,一个字符串代表什么,取决于那条处理它的命令。 同样的“5”,在“string length 5”命令中,会被看成一个字符串;而在“if $a …”命令中,则被看作一个布尔值。当然,命令会检查值的格式是否正确,如果我试图在“bar”上增加一个“foo”值,Tcl会产生一条异常,因为它不能把“bar”和“foo”解析成数字值。Tcl会很严格地执行这类检查,你不会像PHP中遇到那些愚蠢的自动类型转换。类型转换仅发生在该字符串能够有意义地转换成命令所需要的参数时。
所以,Tcl是非常动态的,但想象一下,它甚至和当前的Ruby实现差不多快。在Tcl的实现中,有一个小把戏:对象(不是OOP概念,仅指表示Tcl值的C Struct)缓存了给定的字符串上一次被使用时的原生值。如果一个Tcl值总是被用作一个数字,那么对应的C struct就会包含一个整数值,只要下一条命令仍然把它用作
您可能关注的文档
最近下载
- 【复旦大学-高级病理生理学学习】_脂质代谢紊乱及其相关疾病.ppt VIP
- 2025年昆明市规划设计研究院有限公司招聘(6人)备考练习题库及答案解析.docx VIP
- 全等三角形旋转模型(解析版) -2021年中考数学复习重难点与压轴题型专项训练.pdf VIP
- 医疗器械注册质量管理体系核查指南-解读.docx
- 国开学习网《成本管理》形考任务四答案.pdf
- 汽车换挡器基础知识跟设计要点资料精.pdf VIP
- 学术规范与论文写作(雨课堂)期末考试答案.docx VIP
- 苏州市“吴地工匠”职业技能竞赛暨第九届“吴中技能状元”职业技能竞赛人工智能训练(数据标注)理论题库及答案350题.docx VIP
- 2025工业企业二次数据治理实践指南白皮书.pdf VIP
- 2024学年广东省佛山市顺德区物理高二第一学期期末预测试题含解析.doc VIP
原创力文档


文档评论(0)