Sto riscontrando qualche problema nella comprensione dell'uso del livello superiore in TCL. Sto leggendo la programmazione Pratica di Brent Welch in TCL e Tk e c'è un esempio in uplevel che non riesco a capire. Eccolo:Impossibile capire il comando di livello superiore in TCL
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]
}
Qualcuno può spiegarmelo? La spiegazione nel libro non mi aiuta abbastanza :(
In 8.6, siamo riusciti a trovare un utilizzo per 'uplevel # 1' con coroutine. Questo è stato considerato il primo uso pratico per questa particolare forma, anche se è legale da decenni. –
La sintassi * # * è descritta in questo modo: "Se * livello * è composto da # seguito da un numero, il numero fornisce un numero di livello assoluto." http://www.tcl.tk/man/tcl8.5/TclCmd/uplevel.htm –
@DonalFellows Non 'tailcall' lo stack' coroutine' in cima. –