我在理解TCL中uplevel的使用時遇到了一些問題。我正在閱讀布倫特韋爾奇在TCL和Tk上的實用編程,並且有一個我很難理解的高級示例。這裏是:無法理解TCL中的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]
}
有人可以請解釋給我嗎?這本書中的解釋並不足以幫助我:(
在8.6中,我們設法找到了帶有協程的'uplevel#1'的用法。這被認爲是該特定形式的第一個實際用途,即使它已經合法數十年。 – 2012-07-18 06:13:15
*# *語法是這樣描述的:「如果* level *由#後跟一個數字組成,那麼這個數字給出一個絕對的數字號碼。」 http://www.tcl.tk/man/tcl8.5/TclCmd/uplevel.htm –
2012-07-19 03:07:31
@DonalFellows不要'調用'頂部'協程'堆棧。 – 2015-03-01 07:30:05