2017-06-17 447 views
0

在TCL中,我正在编写一个返回时钟深度的过程。 但因为我有几个时钟我想命名VAR:depth_ $ CLKTCL,如何命名包含其他变量的变量

proc find_depth {} {  
    foreach clk $clocks {  
     …  
     set depth_$clk $max_depth  
     echo $depth_$clk  
    }  
}  

,但我得到:

 
Error: can't read "depth_": no such variable 
     Use error_info for more info. (CMD-013) 

回答

1

你的问题是这样的一行:

echo $depth_$clk  

问题是因为$的语法之后仅解析了一组有限的字符作为变量名称的一部分; $不是其中的一部分。相反,您可以使用set命令和一个参数; $对此是有效的语法糖,但该命令允许您使用复杂替换。

echo [set depth_$clk] 

然而,

real这里要做的正确的事情是切换到使用关联数组。这对你的代码有一点改变,但是让你做更多的事情,因为你可以正确访问数组元素名称中的替换:

proc find_depth {} { 
    foreach clk $clocks { 
     … 
     set depth($clk) $max_depth 
     echo $depth($clk) 
    } 
} 
+0

谢谢!它的工作。你知道如何使这个关联数组成为全局的吗?意思是,我将它设置在另一个proc中,而不是返回它的值,我只是希望它是全局的。 – Tlalit

+1

在过程中引用深度之前,您可以使用命令'全局深度'。通常这是在proc的顶部声明的。但是你也可以通过引用传入一个数组,这比使用全局变量更安全。请参阅upvar命令以通过引用传递变量。 –