TCL变量

文章介绍了TCL语言中的简单变量和数组的使用,包括变量的设置、读取和修改,以及数组元素的处理。提到了变量名的规则,如何避免歧义,并展示了set、unset、append和incr等关键命令的用法。数组在TCL中是通过键值对的形式存在,可以有任意字符串作为下标。此外,文章还指出了TCL不支持复杂数据类型的局限性。
摘要由CSDN通过智能技术生成

目录

简单变量

数组

相关命令

set

unset

append和incr


简单变量

一个 TCL 的简单变量包含两个部分:名字和值。名字和值都可以是任意字符串。例如一个名为 “1323 7&*: hdgg"的变量在 TCL 中都是合法的。不过为了更好的使用置换(substitution), 变量名最好按 C\C++语言中标识符的命名规则命名。 TCL 解释器在分析一个变量置换时,只 把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量 的名字。例如:

set a 2

输出:2

set a.1 4

输出:4

set b $a.1

输出:2.1

在最后一个命令行,我们希望把变量 a.1 的值付给 b,但是 TCL 解释器在分析时只把$符号之后直到第一个不是字母、数字或下划线的字符(这里是'.')之间的单词符号(这里是'a')当作要被置换 的变量的名字,所以 TCL 解释器把 a 置换成 2,然后把字符串“2.1”付给变量 b。这显然与我们的初衷不同。

当然,如果变量名中有不是字母、数字或下划线的字符,又要用置换,可以用花括号把变量名括 起来。例如:

set b ${a.1}

输出:4

TCL 中的 set 命令能生成一个变量、也能读取或改变一个变量的值。例如:

set a {kdfj kjdf}

输出:kdfj kjdf

如果变量 a 还没有定义,这个命令将生成 变量 a,并将其值置为 kdfj kjdf,若 a 已定义,就简单的把 a 的值置为 kdfj kjdf。

set a

输出:kdfj kjdf

这个只有一个参数的 set 命令读取 a 的当前值 kdfj kjdf。

数组

数组是一些元素的集合。TCL 的数组和普通计算机语言中的数组有很大的区别。在 TCL 中,不 能单独声明一个数组,数组只能和数组元素一起声明。数组中,数组元素的名字包含两部分:数组名和数组中元素的名字,TCL 中数组元素的名字(下标)可以为任何字符串。例如:

set day(monday) 1

set day(tuesday) 2

第一个命令生成一个名为 day 的数组,同时在数组中生成一个名为 monday 的数组元素,并把值置为 1,第二个命令生成一个名为 tuesday 的数组元素,并把值置为 2

简单变量的置换已经在前一节讨论过,这里讲一下数组元素的置换。除了有括号之外,数组元素 的置换和简单变量类似。例:

set a monday

set day(monday) 1

set b $day(monday)         //b 的值为 1,即 day(monday)的值。

set c $day($a)         //c 的值为 1,即 day(monday)的值。

TCL 不能支持复杂的数据类型,这是一个很大的缺憾,也是 TCL 受指责很多的方面。但是 TCL 的一个扩展 ITCL 填补了这个缺憾。

相关命令

set

set 命令能生成一个变量、也能读取或改变一个变量的值。

unset

这个命令从解释器中删除变量,它后面可以有任意多个参数,每个参数是一个变量名,可以是简单变量,也可以是数组数组元素。例如:

unset a b day(monday)

上面的语句中删除了变量 a、b 和数组元素 day(monday),但是数组 day 并没有删除,其他元素还存在,要删除整个数组,只需给出数组的名字。例如:

puts $day(monday)

输出:can't read "day(monday)": no such element in array

% puts $day(tuesday)

输出:2

%unset day

% puts $day(tuesday)

输出:can't read "day(tuesday)": no such variable

append和incr

这两个命令提供了改变变量的值的简单手段。

append 命令把文本加到一个变量的后面,例如:

set txt hello

输出:hello

append txt "! How are you"

输出:hello! How are you

incr 命令把一个变量值加上一个整数。incr 要求变量原来的值和新加的值都必须是整数

set b a

输出:a

incr b

输出:expected integer but got "a" 

set b 2

输出:2

incr b 3

5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值