我必须为 TCL 中的两个变量设置相同的值。如何设置?现在正在使用以下命令进行设置?请给我一个替代解决方案。
set Server 192.168.0.1
set srvipaddr 192.168.0.1
“服务器”一词将显示在 GUI 中。如果我们在服务器字段中输入 IP 地址,则必须在该配置文件中的服务器和 srvipaddr(函数中使用的变量名)中设置相同的值。
我必须为 TCL 中的两个变量设置相同的值。如何设置?现在正在使用以下命令进行设置?请给我一个替代解决方案。
set Server 192.168.0.1
set srvipaddr 192.168.0.1
“服务器”一词将显示在 GUI 中。如果我们在服务器字段中输入 IP 地址,则必须在该配置文件中的服务器和 srvipaddr(函数中使用的变量名)中设置相同的值。
做这件事有很多种方法
一个班轮:
的结果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 的方式;它通常是实现“按名称调用”语义的一种方式。
The set
command returns it's value, so you can write
set Server [set srvipaddr 192.168.0.1]
But that becomes less readable.
我不确定以下是否是您正在查看的内容?
set Server 192.168.0.1
set srvipaddr $Server
如果您有许多变量要设置为相同的值,则可以使用循环并在列表中使用变量名称,例如:
% set variables [list one two three]
% foreach n $variables {
set $n 1
}
% puts $one
1
% puts $two
1
% puts $three
1
set Server 192.168.0.1
upvar 0 Server srvipaddr
一个变量,两个名字。