学习熟悉编程的最好方法就是动手,有点面向编程思维的话,直接练习就可以。直接看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. java Object类学习

    /* * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETA ...

  2. JDBCTemplate.java

    package com.pk.xjgs.util; import java.sql.Connection; import java.sql.SQLException; import java.util ...

  3. python join和split和strip用法

    python join 和 split方法的使用,join用来连接字符串,split恰好相反,拆分字符串的. strip()为去除开头结尾指定的字符,空着时是去除空白字符\t,\n,\r意思 1.jo ...

  4. Codeforces Round #355 (Div. 2)

    A 弯腰 #include<cstdio> #include<cstring> #include<iostream> #include<queue> # ...

  5. 教程-最全ASCII 码对照表

    第一部分由 00H 到 1FH 共 32 个,一般用来通讯或作为控制之用,有些字符可显示于屏幕,有些则无法显示在屏幕上,但能看到其效果(例如换行字符.归位字符). 第二部分是由 20H 到 7FH 共 ...

  6. IE6完美解决fixed方法

    ie6对position:fixed不支持,网上有很多解决方法,有的在ie6,ie7上调试成功后,在ie8上又不好使,div层还是跟随滚动条浮 动:以下总结方法,在ie6,ie7,ie8上都调试成功, ...

  7. (4)ARP:地址解析协议

    一.简介 ARP为IP地址到对应的硬件地址之间提供动态映射.之所以称为动态是因为这个过程是自动完成的.一般应用程序用户或系统管理员不必关心.RARP是被那些没有磁盘驱动器的系统使用,它需要系统管理员进 ...

  8. 软交换和IMS是什么关系

    软交换是一种功能实体,为下一代网络NGN提供具有实时性要求的业务的呼叫控制和连接控制功能,是下一代网络呼叫与控制的核心. 简单地看,软交换是实现传统程控交换机的"呼叫控制"功能的实 ...

  9. 【P3O是什么】P3O认证之项目组合、项目群和项目办公室

    如何区分项目组合办公室与项目群和项目办公室? P3O®(Portfolio,Programmed and Project Offices-项目组合.项目群和项目办公室)是由英国商务部 OGC 于200 ...

  10. 山东理工大学ACM平台题答案关于C语言 1543 Egypt

    Egypt Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述   A long time ago, the Egyptians fi ...