如何在tcl中为多个变量设置相同的值

时间:2013-08-06 15:08:39

标签: tcl

我必须在TCL中为两个变量设置相同的值。如何设置?现在使用下面的命令设置?请给我一个替代解决方案。

set Server 192.168.0.1

set srvipaddr  192.168.0.1

Word" Server"将在GUI中显示。如果我们在服务器字段中输入IP地址,则必须在Server和srvipaddr(函数中使用的变量名)中设置相同的值。

5 个答案:

答案 0 :(得分:4)

有几种方法可以做到这一点

单线:

set的结果是设置的值,因此可以用作另一个set命令的值:

set Server [set srvipaddr 192.168.0.1]

使用变量作为值

您还可以设置第一个变量,然后使用它来定义第二个变量:

set Server 192.168.0.1
set srvipaddr $Server

使用循环

因为tcl中的“一切都是字符串” - 包括变量名 - 你可以遍历一个变量名列表:

foreach var {Server srvipaddr} {
    set $var 192.168.0.1
}

变量别名

有一种先进的技术可以让你有两个名字指向同一个变量。此命令为upvar,其工作方式如下:

set Server 192.168.0.1
upvar 0 Server srvipaddr

执行上述操作时,两者都指向相同的内存位置,因此如果更改了一个内存位置,则还会更改另一个内存位置。这是使用upvar的一种不寻常的方式;它通常是一种实现“按名称调用”语义的方法。

答案 1 :(得分:1)

我不确定以下是否是您正在查看的内容?

set Server 192.168.0.1
set srvipaddr $Server

答案 2 :(得分:1)

set命令返回它的值,因此您可以编写

set Server [set srvipaddr 192.168.0.1]

但那变得不那么可读了。

答案 3 :(得分:1)

如果要将许多变量设置为相同的值,则可以使用循环并在列表中使用变量名称,例如:

% set variables [list one two three]
% foreach n $variables {
      set $n 1
  }

% puts $one
1
% puts $two
1
% puts $three
1

答案 4 :(得分:1)

set Server 192.168.0.1
upvar 0 Server srvipaddr

一个变量,两个名字。