【问题标题】:TCL, How to name a variable that includes another variableTCL,如何命名包含另一个变量的变量
【发布时间】:2017-06-17 13:24:07
【问题描述】:

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

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

但我明白了:

错误:无法读取“depth_”:没有这样的变量 使用 error_info 获取更多信息。 (CMD-013)

【问题讨论】:

    标签: variables tcl


    【解决方案1】:

    你的问题是这一行:

        echo $depth_$clk    
    

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

        echo [set depth_$clk]
    

    但是!

    这里真正的正确的做法是切换到使用关联数组。它对您的代码进行了较大的更改,但可以让您做更多事情,因为您可以正确访问数组元素名称中的替换:

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

    【讨论】:

    • 谢谢!!!它的工作。你知道如何使这个关联数组全局化吗?意思是,我将它设置在另一个 proc 中,而不是返回它的值,我只希望它是全局的。
    • 在过程中参考深度之前,您可以使用命令“全局深度”。通常这是在 proc 的顶部声明的。但是你也可以通过引用传入一个数组,这比使用全局变量更安全。请参阅 upvar 命令以通过引用传递变量。
    【解决方案2】:
    echo ${depth}_$cell 
    

    这也有帮助。 谢谢!

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2013-12-04
      • 2014-01-12
      相关资源
      最近更新 更多