TCL,如何命名包含另一个变量的变量

时间:2017-06-17 13:24:07

标签: variables tcl

在TCL中,我正在编写一个返回时钟深度的过程。 但由于我有几个时钟,我想命名var:depth_ $ clk

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)

2 个答案:

答案 0 :(得分:1)

你的问题就在这一行:

    echo $depth_$clk    

问题是$的语法仅在后面解析一组有限的字符,因为它们是变量名的一部分; $不是其中的一部分。相反,您可以将set命令与一个参数一起使用; $对此来说是有效的语法糖,但该命令允许您使用复杂的替换。

    echo [set depth_$clk]

无论其!

真正的正确的做法是切换到使用关联数组。这是对代码的一个更大的改动,但是你可以做更多的事情,因为你已经对数组元素名称中的替换有了适当的访问权限:

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

答案 1 :(得分:0)

echo ${depth}_$cell 

这也有帮助。 谢谢!