首页 > 解决方案 > 试图理解这行 Tcl 代码

问题描述

我想知道这个特定行的 ICCII 命令

set layer_name [get_object_name [lsort -unique [get_attribute [get_drc_error -error_id [get_object_name $eid]] layers]]]

以及这个命令到底在做什么......我收到错误,没有任何隐式匹配

告诉我如何纠正他的命令

标签: tcl

解决方案


我认为这在一行中太过分了。当你把太多放在一起时,它会掩盖问题和混淆。让我们借助一些临时变量将其拆分:

set obj_name [get_object_name $eid]
set layers [get_attribute [get_drc_error -error_id $obj_name] layers]
set unique_layers [lsort -unique $layers]
set layer_name [get_object_name $unique_layers]

这里最可能的问题是lsort -unique可能仍然会产生多个层 ID,而get_object_name只能处理一件事。假设您使用的是 Tcl 8.6,最后一行将变为:

set layer_names [lmap layer $unique_layers {get_object_name $layer}]

也许:

set layer_name [get_object_name [lindex $unique_layers 0]]

在 8.5 及之前的版本中,您不必也lmap必须使用foreach

set layer_names {}
foreach layer $unique_layers {
    lappend layer_names [get_object_name $layer]
}

额外的代码几乎就是lmap为你做的。


推荐阅读