2017-06-17 148 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命令以通過引用傳遞變量。 –