命令名set ---- 设置/获取变量值
命令格式set varName ?
value?
概述tcl中的变量可以分为标量(scala) 和数组(array)两种。
标量用于存放数值,字符窜, 列表。
tcl中的数组是一个哈希数组, 数组中的每个元素由一个键-值对组成。 其中元素的键在整个数组中必须是唯一的, 而值可以出现重复。
变量名可以是任意字符的组合但区分大小写。
如果只给出变量名则返回该变量当前的值。 例: set name
如果给出变量名的同时还指定了变量的值则将该变量的值设置为给定值,如果变量还不存在则使用指定值创建该变量后返回变量的值。 例: set greet 'hello, world!'
如果变量名中含有开花括号并且以闭花括号结尾则表示为是对数组元素的引用, 首次出现的开花括号之前的内容是数组名,位于花括号之间的内容则是数组中元素的索引(index)。 例: set personal(name)
If
varName includes namespace qualifiers
(in the array name if it refers to an array element), or if
varName
is unqualified (does not include the names of any containing namespaces)
but no procedure is active,
varName refers to a namespace variable
resolved according to the rules described under
NAME RESOLUTION in
the
manual page.
除非在变量名的前面使用了global, variable或upvar对变量的作用域进行限定,否则对于出现在函数内且没有使用任何一个前面给出的命令进行限定的变量, 都将被解释为是对该函数中的形参(parameter)或本地变量的引用。
# 将一个随机数保存到变量r
set r [expr {rand()}]
# 将一条消息保存到数组元素中去
set anAry(msg) "Hello, World!"
# 使用变量值作为数组元素的键
set elemName "msg"
set anAry($elemName) "Hello, World!"# 变量作用域
set a 10
set b 20
proc printAB {a} {
set b 22
puts "a in printA: $a"
puts "b in printA: $b"
}
==============>
% printAB 11
a in printAB: 11
b in printAB: 22
proc print_globalAB {} {
global a b
puts "a in printA: $a"
puts "b in printA: $b"
}
==============>
阅读(1101) | 评论(0) | 转发(0) |