学习熟悉编程的最好方法就是动手,有点面向编程思维的话,直接练习就可以。直接看demo

1、过程、作用域

#全局变量:过程外定义的变量
#局部变量: 过程内部定义的变量

set a 100
proc testa {} {puts $::a}
testa

#作用域 : 全局作用域> 过程作用域1>过程作用域2......
puts "********作用域***********"
set ga 100;#全局
proc test {} {set a 100;puts "test level [info level]"} ;#局部作用域名
proc test1 {} {set b 200;test;puts "test1 level [info level]"}
proc test2 {} {set c 2000;test1;puts "test2 level [info level]"}

#test2>test1>test 怎么样来区分层次? [info level]
puts "global: level [info level]"
test2
puts "********作用域***********"

#1. 过程内部访问 全局变量/上层变量 的方法 1. global 2. upvar 3. uplevel 4. ::全局作用域名

puts "global 访问全局变量"
#***********global************
#目标:在过程中改变全局变量的值。
set g_a 100;#过程外定义全局变量a
puts "g_a: $g_a"
proc GetGlobal {} {;# 左括号一定要位于最好,以连接下一行
global g_a
set g_a 200 ;#在过程内被改变
}
GetGlobal
puts "g_a:$g_a" ;# 经过检查确实被改变

puts "global 访问全局变量 结束\r\n"
#*****************************

puts "全局变量:: 开始"

set g_ab 200
proc setab {} {
set ::g_ab 1000
}
setab
puts "g_ab: $g_ab"
puts "全局变量:: 结束\r\n"

puts "upvar 访问全局变量/上层变量/本层变量"
set g_b 1000
proc Getupvar {} {
upvar g_b local_b
puts "local_b: $local_b"
set local_b 2000
}
puts "$g_b:$g_b"

proc level1 {} {
set b 200
puts "b in level 1:$b"
level2
puts "b in level 1:$b"
}
proc level2 {} {
upvar 1 b local_b
set local_b 800
}
puts "upvar 访问全局变量/上层变量/本层变量/结束\r\n"

puts "uplevel改变全局变量/上级变量/本层变量 开始"

set g_level0 100
proc l1 {} {uplevel #0 {set g_level0 5000}}
l1;#执行
puts "after l1 g_level0: $g_level0"

puts "uplevel改变全局变量/上级变量/本层变量 结束\r\n"

2、命名空间

#命名空间
#作用:防止同名变量冲突,对变量和过程 划分区域, 针对多个文件引用。

#1. 基本概念
set bb 2000;#全局变量

namespace eval no1 {
variable name 20
proc testfun {} {puts "i am in no1"}
}
namespace eval no2 {
variable name 30
proc testfun {} {puts "i am in no2"}
}
puts "$no1::name"
puts "$no2::name"
no1::testfun
no2::testfun

puts "****************adv app*******"
namespace eval test {
namespace export get_var get_global
variable aa 20
variable bb 4000
proc get_var {} {variable aa; set aa 200;return $aa}
proc get_global {} {puts "global bb:$::bb"}
}
puts $test::aa
puts "aa: [test::get_var]"
test::get_global
#2.导入和导出 省略命名空间
puts "导入和导出,"
namespace import test::get_var
puts [get_var]
namespace import test::get_global
get_global
#>>namespace import test::*

#3.命名空间嵌套
namespace eval t1 {
namespace eval t2 {
variable mytest 2000
}
}
puts $t1::t2::mytest

3、itcl基础编程

#类定义
#itcl::class className {
# inherit baseClass ?baseClass...?
# constructor args ?init? body
# destructor body
# method name ?args? ?body?
# proc name ?args? ?body?
# variable varName ?init? ?config?
# common varName ?init?
# public command ?arg arg ...?
# protected command ?arg arg ...?
# private command ?arg arg ...?
# set varName ?value?
# array option ?arg arg ...?
# }
package require itcl
namespace import itcl::*
#构造函数/析构函数==》 我轻轻的 “来” 了,挥一挥衣袖不带 “走” 一片云彩
itcl::class Father {
variable name "NoOne"
variable money 0
common peoples 0
proc getpeople {} {puts "we have $peoples people"}
method getmoney {} {return "[$this info class] has $money"}
constructor {{mymoney 500}} {set money $mymoney;puts "have money $mymoney";incr peoples}
destructor {puts "i am $this,good bye"; incr peoples -1}
}
Father f1
puts [f1 getmoney]
f1 getpeople
#继承
itcl::class Sun {
inherit Father
}
Sun s1
puts [s1 getmoney]
#多态
class SunOther {
inherit Father
method getmoney {} {puts "i am SunOther,not Father!";return "[$this info class] has $money"}
}
SunOther s2
puts [s2 getmoney]
# common 类变量
# proc 类函数,大家都可以调用
s1 getpeople
s2 getpeople
f1 getpeople
#public,private,protected 描述父子关系
class Mother {
public method pubfunc {} {puts "pubfunc"}
private method prifunc {} {puts "prifunc"}
protected method profunc {} {puts profunc}
;#内部调用
method runpub {} {pubfunc}
method runpro {} {profunc}
method runpri {} {prifunc}
}
Mother m1
m1 pubfunc;#外部调用 OK

#内部调用
m1 runpub
m1 runpro
m1 runpri
# m1 prifunc
# m1 profunc
class Dt {
inherit Mother
#
method runpub {} {pubfunc}
method runpro {} {profunc}
method runpri {} {prifunc}
#
}

Dt dt
dt pubfunc

dt runpub
dt runpro
dt runpri
#失败

# dt prifunc
# dt profunc

【itclx面向对象一】tcl基础语法:过程、作用域、以及itcl面向编程回顾的更多相关文章

  1. TCL语言笔记:TCL基础语法

    一.什么是TCL Tcl 全称是 Tool command Language.它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握. Tcl 语言是一个解释性语言,所谓解释性是指不象其 ...

  2. C++ 基础语法 快速复习笔记---面对对象编程(2)

    1.C++面对对象编程: a.定义: 类定义是以关键字 class 开头,后跟类的名称.类的主体是包含在一对花括号中.类定义后必须跟着一个分号或一个声明列表. 关键字 public 确定了类成员的访问 ...

  3. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  4. Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。

    Python3 与 C# 面向对象之-继承与多态   文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...

  5. python面向对象的基础语法(dir内置函数、self参数、初始化方法、内置方法和属性)

    面相对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...

  6. python-面向对象-03_面向对象基础语法

    面向对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...

  7. Java基础语法(9)-面向对象之类的成员

    title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...

  8. Java基础语法(11)-面向对象之关键字

    title: Java基础语法(11)-面向对象之关键字 blog: CSDN data: Java学习路线及视频 1.this this是什么 它在方法内部使用,即这个方法所属对象的引用: clas ...

  9. Java基础语法(10)-面向对象之三大特征

    title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...

随机推荐

  1. Enterprise Suse运维

    1,Suse CDH4安装 wget archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_ ...

  2. Hadoop概念学习系列之分布式文件系统(三十)

    ===============> 数据量越来越多,在一个操作系统管辖的范围存下不了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就 ...

  3. 电脑突然死机,系统日志记录事件ID=6008

    刚才正在写代码,在一次保存之后,正要刷新看下效果,电脑突然关机,没有任何提示或延迟.我的笔记本电池是一直插上的,也连接着电源. 重新开机之后,找到系统日志查看.只有这一条错误记录:非正常关机,事件60 ...

  4. A Tour of Go Concurrency

    The next section covers Go's concurrency primitives. A Tour of Go Goroutines A goroutine is a lightw ...

  5. Integer的缓存机制

    Java api 中为了提高效率,减少资源的浪费,对内部的Integer类进行了缓存的优化,通俗的说就是把-127至128这个范围内的数提前加载到内存,当我们需要的时候,如果正好在这个范围之内,就会直 ...

  6. ELK beats平台介绍(11th)

    beats是一个代理,将不同类型的数据发送到elasticsearch.beats可以直接将数据发送到elasticsearch,也可以通过logstash将数据发送elasticsearch. be ...

  7. 【Away3D代码解读】(五):动画模块及骨骼动画

    动画模块核心存放在away3d.animators包里: Away3D支持下面几种动画格式: VertexAnimator:顶点动画 SkeletonAnimator:骨骼动画 UVAnimator: ...

  8. Stage3D学习笔记(一):3D术语简介

    网格(Mesh) 3D中,所有可见的模型都被称作网格.网格是由3DMax等建模软件制作,定义了一个3D物体的形状.一个网格是由多个多边形组成的. 多边形(Polygon) 一个多边形是组成网格的一个最 ...

  9. Android Handler的简单使用

    大家好我们这一节讲的是Android Handler的使用,在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title. 首先我们看一下习惯了Java编程的人,在不知道Handl ...

  10. ECSHOP在线手册布局参考图--文章详情页 article.dwt

        A.购物车 1,设置方法 程序自动读取购物车的商品数量 2,代码相关 cart.lbi 中 {insert_scripts files='transport.js'} <div clas ...