我有些困惑如何使用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 #1
与协程结合使用。尽管这种形式已经合法存在了几十年,但这被认为是该形式有史以来的第一个实际应用。 - Donal Fellows协程
栈进行tailcall
操作。 - Johannes Kuhn