2017年(46)
分类: 系统运维
2017-05-16 14:58:08
原文地址:TCL/OTCL总结 作者:yexin218
基本语法 | |
赋值语句 | set var 0 |
变量取值 | $var, e.g. set var1 $var2 |
表达式 | [expr ...], e.g. set x [expr $a + $b] |
型别系统 | 变量无类型,但数值有类型,比如整型、浮点类型、字符串。其中也有casting,如[expr 1/60]是整型,[expr 1.0/60]是浮点数。TCL的串有些怪,但是很方便。比如,如果变量x的值是2,那么"x $x"的值是"x 2"。即使在引号范围内,$也会起作用。此外TCL也支持List或Vector类型。 |
List操作 | TCL的List也是0 based。所以[lindex list 0]从list中取出第一个元素的值。 |
注释 | 以'#'导引 |
IO相关 | |
命令行参数 | $argc和$argv |
打开文件 | [open filename w],返回文件句柄 |
写文件 | puts filehandler string -nonewline |
控制台输出 | puts string -nonewline,写上文件句柄stdout、stderr也可以。 |
执行Unix命令 | exec, e.g. exec xgraph data & 用ns xgraph命令显示数据data,其中&表示该命令在背景线程执行 |
控制结构 | |
选择 | if{boolean expression}{ } |
循环 | for {init} {condition} {incr}{ } e.g. for {set i 0} {$i < 5} {incr i}{ } |
Procedure与栈 | |
Procedure的定义 | proc procname {par1 par2 ...} { global var1 var2 return $something } TCL caller除了可以通过返回值从procedure call得到结果,也可以通过global variable与procedure交互。 |
Procedure的调用 | procname var1 var2 ... [procname var1 var2 ...]能获得返回值 TCL支持递归? |
OTCL对TCL的OO扩展 | |
类声明 | Class ClassName |
this指针 | self |
成员变量 | ClassName instvar varname |
method定义 | ClassName instproc methodname {parlist} {body} |
构造函数 | 名字为init的method |
继承机制 | DerivedClass -superclass BaseClass |
一个例子 | Class Real Real instproc init {a} { $self instvar value_ set value_ $a } Real instproc sum {x} { $self instvar value_ set op "$value_ + [$x set value_] = \t" set value_ [expr $value_ + [$x set value_]] puts "$op $value_" } Real instproc multiply {x} { $self instvar value_ set op "$value_ * [$x set value_] = \t" set value_ [expr $value_ * [$x set value_]] puts "$op $value_" } Real instproc divide {x} { $self instvar value_ set op "$value_ / [$x set value_] = \t" set value_ [expr $value_ / [$x set value_]] puts "$op $value_" } Class Integer -superclass Real Integer instproc divide {x} { $self instvar value_ set op "$value_ / [$x set value] = \t" set d [expr $value_ / [$x set value]] set value_ [expr round($d)] puts "$op $value_" } ########################## set realA [new Real 12.3] set realB [new Real 0.5] $realA sum $realB $realA multiply $realB $realA divide $realB set integerA [new Integer 12] set integerB [new Integer 5] set integerC [new Integer 7] $integerA multiply $integerB $integerB divide $integerC |