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

如何在tcl中为多个变量设置相同的值,tcl,Tcl,我必须为TCL中的两个变量设置相同的值。如何设置??现在我使用下面的命令来设置?请给我一个替代方案 set Server 192.168.0.1 set srvipaddr 192.168.0.1 “服务器”一词将显示在GUI中。如果我们在服务器字段中输入ip地址,则必须在服务器和配置文件中的srvipaddr(函数中使用的变量名)中设置相同的值。我不确定以下内容是否是您所看到的 set Server 192.168.0.1 set srvipaddr $Server 我不确定以下是不是

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

set Server 192.168.0.1

set srvipaddr  192.168.0.1

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

我不确定以下内容是否是您所看到的

set Server 192.168.0.1
set srvipaddr $Server

我不确定以下是不是你正在看的

set Server 192.168.0.1
set srvipaddr $Server

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

set Server [set srvipaddr 192.168.0.1]

但是它的可读性变差了。

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

set Server [set srvipaddr 192.168.0.1]

但是这会变得不那么可读。

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

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

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

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

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

% puts $one
1
% puts $two
1
% puts $three
1
一个变量,两个名称


一个变量,两个名称。

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

一行:

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
}
变量别名

有一种高级技术可以让两个名称指向同一个变量。此命令是,其工作方式如下:

set Server 192.168.0.1
upvar 0 Server srvipaddr

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

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

一行:

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
}
变量别名

有一种高级技术可以让两个名称指向同一个变量。此命令是,其工作方式如下:

set Server 192.168.0.1
upvar 0 Server srvipaddr

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

这种技术的优点是保持值同步。这种技术的优点是保持值同步。嗨,Bryan Oakley,以上所有命令都工作得很好。感谢您的支持。嗨,布莱恩·奥克利,以上所有命令都运行良好。谢谢你的支持。