Tcl -- upvar

news/2024/10/30 11:27:06/

1. upvar:类似于C语言中的引用传参(别名)

这里涉及到层级(栈级)的概念,upvar 2表示向上两级,默认值是1.

我们知道局部变量(函数参数)都是存在栈中的,这样做就是将栈进行分级,便于访问变量,只要切换到变量所在的栈级,就可以访问到它了。

使的在函数内部可以更改函数的变量的值

% set a 10 ;#定义一个变量a,值为10
10
% proc test {x} {puts $x
}
% test a
a
% test 10
10
% proc fun {x} {upvar $x y ;#y对应的是字符串x所对应的变量的值,指向变量xputs $xputs $y
}
% fun a
a
10
% fun 10
bad level "10"

2. 再看一个例子

% namespace eval foo {namespace export funproc fun {} {upvar 1 name jset j "book"}
}
% set name "yan"
yan
% puts $name
yan
% foo::fun
book
% puts $name
book

1)namespace export fun:表示fun函数可以在外部调用,还可以用namespace import 导入到另一个namespace。

2)upvar后的1表示层级,如果不指定,它会使用上一级,默认值是1,还可以使用抽象的层级号码,形式是#后接一个层级数字。

3)upvar name j : 用j引用name,改变j的值就相当于改变name的值。

3. 层级

% proc fun {} {puts "fun: [info level]";too;};
% proc too {} {puts "too: [info level]";bar;}
% proc bar {} {puts "bar: [info level]"}
% puts "global: [info level]"
global: 0
% fun
fun: 1
too: 2
bar: 3

从上面可以看出预设的最外一层global的层级是0,fun的层级是1,fun内调用too是2,too内调用bar是3.

若想在bar中存取fun级,fun是bar的上两级,应该使用uplevel 2 {  }。

最后一个例子

% proc test {x} {puts "test level = [info level]"upvar 2 $x myxputs "test::x $x"puts "test::myx $myx"
}
% proc fun {x} {puts "fun level = [info level]"upvar 1 $x funxputs "fun::x $x"puts "fun::funx $funx"test b
}

定义了两个proc,下面来调用:

% set a 10
10
% set b 20
20
% fun a
fun level = 1
fun::x a
fun::funx 10
test level = 2
test::x b
test::myx 20



 


http://www.ppmy.cn/news/149518.html

相关文章

[TCL]Tcl语言基礎教程(一)

Tcl语言参考(一) Tcl("Tool Command Language",即工具命令语言;Tcl念作“踢叩” "tickle" )是一种易学易用易于扩展的脚本语言,实际上包 含了两个部分:一个语言和一个库。 首先,Tcl是…

TCL语言

目录 引言概述其他 变量、数组和列表变量数组列表 控制流过程函数正则匹配文本处理 引言 TCL(Tool Command Language)脚本语言是对EDA兼容性最好的语言,非常适合做EDA流程控制。如下图所示: IC设计中另一种常用语言是Perl&#…

TCL: tcl小结

 lindex - 从列表中获得一个元素 语法 lindex list ?index...? 描述 lindex命令接受一个参数列表 list,可以接受0个或者多个 index参数,在多个参数的情况下,参数可以是单独的一次排列,也可以是在…

智能晾衣架(一)--设计

本文素材来源于红河学院 工学院 作者:赵德森 张艺锦 潘志慧 曹紫康 指导老师:江洁 张龙超 一、简介 本作品设计的晾衣系统从人们日常生活研究设计,体积小,收纳方便,不占空间可以在日常生活中极大的便利用户。我们…

Tcl 简介及特性

【简介|特性】 l 简介 Tcl是一门产生于80年代末的语言,和Python一样,她是用c开发出来的,如果说C/Java/C/C#为编译型语言的话,那么Python、Perl和Tcl就是一门解释性语言,也就是说程序不需要先编译为机器能识别的二进…

TCL 的安装

TCL 的安装 ActiveTcl的下载安装ActiveTcl交互式解释器tclsh的启动wish 解释器Lets do it! ActiveTcl的下载 ActiveTcl 是一款免费的Tcl 预编译器,可以在ActiveState网站ActiveState下载所需要的版本,也可以在作者的博客中免费下载ActiveTcl…

TCL脚本语言学习

文章目录 前言一、安装二、变量列表1、置换subtitution2、变量3、数组4、列表5、一些命令 三、控制流1、if语句2、foreach3、break:直接结束循环4、continue:结束本次循环5、while6、for循环7、switch 四、过程函数1、proc自定义函数2、全局变量和局部变…

TCL的列表操作

concat concat 列表A 列表B lrepeat lrepeat 重复次数 列表A lindex lindex 列表A 元素索引 lrange lrange 列表A 元素索引a 元素索引b llength length 列表A lassign lassign 列表A 元素索引a 元素索引b lappend lappend 列表A 增加的元素 lins…