在修复上一篇CATIA插件的BUG时,接触到了新的语言TCL。有点兴趣,这就了解一下。

官方网站https://www.tcl.tk/

基本是从这个网站上进行学习。

[TOC]

基本语法

Hello world

创建一个文本文件,改名字为test.tcl,用文本编辑器打开,可以使用Atom打开,配合TCL的语法高亮插件,食用更美味。

注意TCL一行语句的结尾没有;作为分割

#!/usr/bin/tclsh
puts "Hello, World!"

然后,在test.tcl文件所在的文件夹内启动git bash.输入

tclsh test.tcl

就可以看到输出Hello, World!了

注释

# 使用#进行单行注释
#!/usr/bin/tclsh 

# 使用if 0 可以多行注释,也就是跳过
if 0 {
my first program in Tcl program
Its very simple
}

#行内注释使用 ;#。下面给出一个例子。
puts "Hello World!" ;# my first print in Tcl program

标示

TCL不允许标点字符,如@和%标识符。TCL是大小写敏感的语言
有一些是保留的关键字,不能使用,参见保留字

命令语法

Tcl命令的语法如下。

commandName argument1 argument2 ... argumentN

变量

申明变量和使用变量

#将3 赋给变量a
set a 3
# 使用变量a
puts $a

数据类型及变量

基本类型

set num 3
set selfword test
set selfwords "test words"
#使用“”和{}时,即相当于赋值了字符串,也相当于创建的是数组
set numgroup {this is a group too}

数组

# 获得数组groupVarib的大小
[array size groupVarib]

赋值和取值

set languages(0) Tcl
set languages(1) "C Language"
puts $languages(0)
puts $languages(1)

列表

相当于list,

set listName { item1 item2 item3 .. itemn }
# 将数组转为list对象
set listName [split "items_separated_by_a character" _]
#列表长度
llength listName

字典

下面例子中key=english,value=80

set  marks(english) 80
puts $marks(english)

句柄

TCL句柄通常用于表示文件和图形对象。这些可以包括句柄网络请求以及其它渠道,如串口通讯,套接字或I/O设备。下面是创建一个文件句柄的例子

set myfile [open "filename" r]

变量

TCL支持变量中数据格式的默认转换,

#这时候,stringnum中应该是字符串类型
set stringNum "2"
#在执行expr公式计算的时候,stringnum自动转成了实数
set sum [expr $stringNum +20];

定义公式

上面例子中,使用[],将一个公式框出来,其中expr指定了后面的为一个数学公式。

逻辑控制

IF

和C#,c++一样的语法

set a 10
#check the boolean condition using if statement
if { $a < 20 } {
   # 执行的语句 
}
else
{ }

Switch

switch的语法类似,分支不用写case

switch switchingString {
   matchString1 {
      body1
   }
   default {
     puts "Invalid grade"
   }
}

循环

while循环,条件是用{}包裹

while { $a < 20 } {
   puts "value of a: $a"
   # 逐级增加 a 的值
   incr a
}

for循环,用三个{}表示常规条件的设置

for { set a 10}  {$a < 20} {incr a} {
   puts "value of a: $a"
}

循环支持,breakcontinue语法

函数

  1. proc作为关键字,下面定义了一个add函数,包含两个变量a,b。执行函数的格式是 [add 参数1 参数2]
proc add {a b} {
   return [expr $a+$b]
}
puts [add 10 30]
  1. 可变参数函数,其中{numbers}
proc avg {numbers} {
    set sum 0
    foreach number $numbers {
      set sum  [expr $sum + $number]
    }
    set average [expr $sum/[llength $numbers]]
    return $average
}
puts [avg {70 80 50 60}]
  1. 带默认参数的函数,其中参数b的默认值为100
proc add {a {b 100} } {
   return [expr $a+$b]
}
puts [add 10 30]
puts [add 10]
  1. 有一类特殊的函数,递归函数,有专门的关键字factorial
proc factorial {number} {
   if {$number <= 1} {
      return 1
   } 
   return [expr $number * [factorial [expr $number - 1]]]
}
puts [factorial 3]
Last modification:March 25, 2019
如果觉得文章对你有用,请随意赞赏