TCL:如何在 TCL 中将foreach_in_collection重新认证为 proc

tcl: how to rebuid foreach_in_collection as proc in tcl

提问人:JoshTitle 提问时间:10/1/2023 更新时间:10/5/2023 访问量:66

问:

出于某种原因,我需要在 tcl 中将foreach_in_collection(SDC 命令)重建为“foreach”。

下面是快照代码:

proc set_disable_timing { argv } { body ... }
proc get_cells { argv } { body ... }

这里有一个 proc “foreach_in_collection”,我试图像 foreach 一样构建:

proc foreach_in_collection {item collection script } {
  foreach collection $collection_list {
     uplevel [list set $item $collection]
     uplevel 1 $script
  }
}

我的源文件包括一个代码,例如

set all_cells [get_cells -hier my_cell*]
foreach_in_collection cell $all_cells {
   set_disable_timing $cell
}

但 Tcl 报告无效命令“-hier” 如何解决问题

foreach 语法 tcl sta

评论

0赞 Donal Fellows 10/1/2023
您可能没有完全向我们展示的内容,并且语法错误在您未显示的位中的某个地方。请记住在错误后查看以获取堆栈跟踪...$errorInfo

答:

0赞 glenn jackman 10/2/2023 #1

看起来你想要

proc foreach_in_collection {item collection script } {
  upvar x $item
  foreach x $collection {
     uplevel $script
  }
}

When 设置为 foreach_in_collection 中的值,然后在调用 foreach_in_collection 的上下文中设置为相同的值。xcell

然后,当您 ,即使用正确的值调用set_disable_timing。uplevel $script

0赞 Cyan Ogilvie 10/5/2023 #2

这不就是:

interp alias {} foreach_in_collection {} foreach

也就是说:它实际上只是命令的不同拼写。foreach

本机命令比为这些填充码提供的命令更强大,如果您需要它是一个错误,如果参数不是,那么我认为您可以这样做:foreachitem collection script

proc foreach_in_collection {item collection script} {
    tailcall ::foreach $item $collection $script
}