tcl - 无法理解 TCL 中的上级命令

标签 tcl

我在理解 TCL 中 uplevel 的使用时遇到了一些问题。我正在阅读 Brent Welch 在 TCL 和 Tk 中的实用编程,并且有一个我无法理解的 uplevel 示例。这里是:

proc lassign {valueList args} {
  if {[llength $args] == 0} {
    error "wrong # args:lassign list varname ?varname...?"
  }
  if {[llength $valueList] == 0} {
    #Ensure one trip through the foreach loop
    set valueList [List {}]
  }
  uplevel 1 [list foreach $args $valueList {break}]
  return [lrange $valueList [llength $args] end]
}

有人可以向我解释一下吗?书中的解释对我帮助不够:(

最佳答案

uplevel command 在当前过程之外的另一个范围内执行命令(或实际上是脚本)。特别是,在这种情况下,它是 uplevel 1这意味着“在调用者中执行”。 (您也可以使用 uplevel #0 在全局范围内执行,或者也可以在其他地方执行,例如使用 uplevel 2 的调用者的调用者,但这真的很少见。)

解释该行的其余部分: list 的使用这里是一种构造无替换命令的方法,它由四个字组成,foreach ,内容args变量,valueList的内容变量,和 break (实际上并不需要放在大括号中)。这将从 valueList 的前面分配一个值到 args 中列出的每个变量,然后停止,它会在调用者的上下文中这样做。

总体而言,该程序的工作方式与内置 lassign 相同。在 8.5 中(假设一个非空的输入列表和变量列表),除了由于作用域和类似事物之间交换的复杂性而变慢。

关于tcl - 无法理解 TCL 中的上级命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11533962/

相关文章:

linux - 如何使用 TCL 脚本在 Linux 中以根模式运行 tshark 命令?

debugging - TCL脚本调试

list - Tcl/TK : How do I append or insert into a nested list?

tcl - 如何从 tcl 中的文件中提取特定值

c++ - Tcl C++ API - 如何类型安全地转换一个空指针

ubuntu - 预期 5.43.0 和 tclsh 8.4 的段错误

linux - Tcl 期待 : How can you expect 2 matches in 1 line

c++ - SWIG:std/multimap.i 似乎因 Tcl 包装而损坏

exec - 在 Unix 上的 Tcl 中,如何杀死已使用 exec 启动的后台进程?

c++ - tclsh 与希望 (tcl/tk)