Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67468
  • 博文数量: 46
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2017-04-22 16:11
文章分类
文章存档

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也支持ListVector类型。
List操作 TCLList也是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}{

}else{

}
布尔表达式里面可以使用 ==!=
循环 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
的参数传递是传值,所以对parameter的赋值,caller感觉不到。
caller除了可以通过返回值从procedure call得到结果,也可以通过global variableprocedure交互。
Procedure的调用 procname var1 var2 ...
[procname var1 var2 ...]
能获得返回值
TCL支持递归?
OTCL对TCL的OO扩展
类声明 Class ClassName
this指针 self
成员变量 ClassName instvar varname
method定义 ClassName instproc methodname {parlist} {body}
构造函数 名字为initmethod
继承机制 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
阅读(746) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~