Tcl

站点

官方站点

教程站点

基本知识

下载安装 Activestate ActiveTcl 8.6.1.0

执行 tclsh 可以执行指定的 tcl 脚本

直接执行 tclsh 不带参数进入交互式命令环境

输入 info commands 可以列出当前已知的所有命令

执行 wish 命令可以打开一个特殊的 tcl shell 用于开发窗体应用

补充知识

TkCon 是 Jeff Hobbs 写的另一个解释器

Eclipse IDE 也可以支持 Tcl

需安装 DLTK 扩展

支持 Tcl 的 IDE 列表

a

支持 Tcl 的源码编辑器

a

基本的文本输出

puts 命令

puts HelloWorld

puts "Hello World"

puts {Hello World}

引入知识

字符串的定界问题

裸字符串

双引号定界

花括号定界

分号的作用

注释

同行注释时容易犯的错误

puts "Hello World" ;# some comments

正确

puts "Hello World" # some comments

错误

赋值到变量

set 命令

set a 100

第一个参数是变量名

可以是单词

可以是 array 成员

第二个参数是值

内部步骤

在内存中将变量名指向值所在内存

返回值

set a

当只有一个参数时本命令返回该参数的内容

set 范式

set varName value

如果 value 出现了则将 varName 的值设置为 value

varName 判定

只由 alphanumeric 字符组成且无括号

判定为 scalar variable

形如 varName(index)

判定为 associative array 的 member

引入知识

Tcl 中一切都是字符串

但是在解释器内部却可能分为 list, integer 等其他类型

set X 100
puts $X

$ 符号提示 Tcl 使用 x 的值

这里涉及到 Tcl 传递数据给 subroutines 的方式

传递 name

传递 value

重要

Commands that don't change the contents of a variable usually have their arguments passed by value.

Commands that do change the value of the data must have the data passed by name.

set X 100
puts "$X"

双引号中的字符串会首先经过展开

但是在本节里并没有详细解释这一问题

疑问

scalar variable 是什么

associative array 是什么

求值与替换 1: 通过 "" 分组参数

基础背景知识

Tcl 中命令求值的两个阶段

第一阶段 执行一遍替换

第二阶段 对剩下的命令进行求值