Ich habe einige Probleme, die Verwendung von uplevel in TCL zu verstehen. Ich lese Brent Welchs Praktische Programmierung in TCL und Tk und es gibt ein Beispiel in der oberen Ebene, das ich nicht verstehen kann. Hier ist es:Kann Uplevel-Befehl in TCL nicht verstehen
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]
}
Kann mir bitte jemand es erklären? Die Erklärung in dem Buch hilft mir nicht genug :(
In 8.6 haben wir gefunden, eine Verwendung für 'uplevel # 1' mit Koroutinen zu finden. Dies wurde als der erste praktische Gebrauch _ever_ für diese bestimmte Form betrachtet, obwohl es seit Jahrzehnten legal ist. –
Die * # * Syntax wird folgendermaßen beschrieben: "Wenn * level * aus # besteht, gefolgt von einer Zahl, dann gibt die Zahl eine absolute Nummer." http://www.tcl.tk/man/tcl8.5/TclCmd/uplevel.htm –
@DonalFellows Nicht "tailcall" den oberen "Coroutine" Stapel. –