1

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

set Server 192.168.0.1

set srvipaddr  192.168.0.1

“服务器”一词将显示在 GUI 中。如果我们在服务器字段中输入 IP 地址,则必须在该配置文件中的服务器和 srvipaddr(函数中使用的变量名)中设置相同的值。

4

5 回答 5

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 的方式;它通常是实现“按名称调用”语义的一种方式。

于 2013-08-06T16:43:21.287 回答
1

The set command returns it's value, so you can write

set Server [set srvipaddr 192.168.0.1]

But that becomes less readable.

于 2013-08-06T15:48:17.120 回答
1

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

set Server 192.168.0.1
set srvipaddr $Server
于 2013-08-06T15:21:04.477 回答
1

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

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

% puts $one
1
% puts $two
1
% puts $three
1
于 2013-08-06T16:20:13.783 回答
1
set Server 192.168.0.1
upvar 0 Server srvipaddr

一个变量,两个名字。

于 2013-08-06T16:39:31.553 回答