Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 在tcl中,can';当一个变量的名称由另一个变量组成时,不能读取该变量_Variables_Nested_Tcl - Fatal编程技术网

Variables 在tcl中,can';当一个变量的名称由另一个变量组成时,不能读取该变量

Variables 在tcl中,can';当一个变量的名称由另一个变量组成时,不能读取该变量,variables,nested,tcl,Variables,Nested,Tcl,基本上,我现在做的是 set i 0 set log_$i "blah blah" puts $log_$i; # expecting to see "blah blah" 这将返回错误: 无法读取“日志”:没有此类变量 我尝试过各种不同的分组,但似乎没有任何效果。你遇到的问题是,$-替换在遇到$(以及许多其他标点符号)时停止 要使您所做的工作正常,您可以这样做来读取变量(使用命令的单参数形式): 它可以编译成您所期望的字节码类型 但是… 如果可以避免的话

基本上,我现在做的是

set i 0

set log_$i "blah blah"

puts $log_$i;                  # expecting to see "blah blah"
这将返回错误:

无法读取“日志”:没有此类变量


我尝试过各种不同的分组,但似乎没有任何效果。你遇到的问题是,
$
-替换在遇到
$
(以及许多其他标点符号)时停止

要使您所做的工作正常,您可以这样做来读取变量(使用命令的单参数形式):

它可以编译成您所期望的字节码类型

但是… 如果可以避免的话,就不要那样做

每当您考虑构建这样的变量时,您都很可能需要使用数组:

set i 0
set log($i) "blah blah"
puts $log($i)
这确实有效。如果您确实需要使用已构造名称的变量,则通常更容易为其构造一个(通常是本地)变量别名,如下所示:

set i 0
upvar 0 log_$i v
set v "blah blah"
puts $v

这个命令很复杂,允许使用各种真正强大的技术。它还使变量的本地别名非常有效(尽管此别名不包括每次查找变量;如果希望别名指向其他对象,则需要重新运行
upvar

另一种方法是

==>tclsh

% set i 0

0

% set log[set i] bb

bb

% puts "[set log[set i]]"

bb
另一种方式:

% set i 0
0
% set log(0) "blah blah"
blah blah
% puts $log($i)
blah blah
谢谢:)我现在使用了“set”命令,它工作得很好。将来我会尝试使用数组,但这里只有2个变量,所以这次我不会更改它。
% set i 0
0
% set log(0) "blah blah"
blah blah
% puts $log($i)
blah blah