tcl - 试图理解这行 Tcl 代码
问题描述
我想知道这个特定行的 ICCII 命令
set layer_name [get_object_name [lsort -unique [get_attribute [get_drc_error -error_id [get_object_name $eid]] layers]]]
以及这个命令到底在做什么......我收到错误,没有任何隐式匹配
告诉我如何纠正他的命令
解决方案
我认为这在一行中太过分了。当你把太多放在一起时,它会掩盖问题和混淆。让我们借助一些临时变量将其拆分:
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
为你做的。
推荐阅读
- angular - 在 Angular 7 中渲染组件之前加载数据
- python-3.x - 卡在python中的矩阵加法
- reactjs - 在 React drop zone 组件中,如何默认拥有一个图像?
- bash - 捕获所有 bash 命令作为自定义运行器的参数
- bitbucket - bitbucket ci cd 管道 ssh 连接失败
- c - C和静态代码分析:这比memcpy安全吗?
- python-3.x - Google Assistant SDK 不读取我的邮件
- python - 如何每次创建一个唯一的字母数字 id 并确保它不存在于我使用 python 的现有列表中?
- android - SharedElementTransition 可以交互吗?
- c# - 如何使用 Appium 自动化在 android 模拟器中单击应用程序菜单按钮的事件?