我必须在TCL中为两个变量设置相同的值。如何设置?现在使用下面的命令设置?请给我一个替代解决方案。
set Server 192.168.0.1
set srvipaddr 192.168.0.1
Word" Server"将在GUI中显示。如果我们在服务器字段中输入IP地址,则必须在Server和srvipaddr(函数中使用的变量名)中设置相同的值。
答案 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
一个变量,两个名字。