tcl tk參考 控制結構return

2021-04-17 12:19:19 字數 4321 閱讀 1143

return - 從程序中返回或者返回乙個值return?

result?

return?-codecode? ?

result?

return?

option value ...? ?

result?

最簡單的用法,return命令在程式體內直接使用而不帶任何可選項,這樣將會使過程立刻返回。如果有

result變元,過程就返回

result的值,如果

result沒有指定就返回乙個空字串。

return命令可以在source命令中執行,當source執行乙個指令碼,return命令可以使指令碼的執行立刻停止,result將作為source的結果返回。

對於乙個過程的結果,可以通過return的-code可選項來返回額外的**,通常當-code不指定時過程正常返回,但是當-code使用時就產生乙個異常,

code可以是以下的值:

ok (or 0)一般返回:就像這個可選項被忽略掉的效果相同,過程的返回**為0(tcl_ok)。

error (1)錯誤返回:過程的返回**為1(tcl_error),返回的方式就像是命令error result相同。

return (2)過程返回**為2(tcl_return),返回的方式就像是命令return(沒有變元)。

break (3)過程返回**為3(tcl_break),返回的方式就像是命令break

continue (4)過程返回**為4(tcl_continue),返回的方式就像是命令continue

value

value必須是乙個整數,作為返回**返回。

當乙個過程想指出它接收到了乙個錯誤的變元,使用return -code error加上result去設定乙個合適的錯誤訊息,其它return -code的用法一般都是執行乙個新的控制結構。

return -code命令可以在source命令中執行,當source執行乙個指令碼,return -code命令可以使指令碼的執行立刻停止,return -code中的code將作為source的結果返回。

除了作為結果和返回**,在tcl中執行乙個命令也可以返回乙個可選項,一般的用法,所有的以下列出的option value都可以被catch命令捕獲到。

上文中所述的-code可選項會被tcl特殊處理,下面的其它的可選項也會被tcl特殊處理。它們是:

-errorcodelist

只有當-codetcl_error-errorcode可選項會被特殊對待,如果

list的值是關於錯誤的額外資訊,就被當作tcl列表進一步處理。當提供了-code error可選項但是沒有-errorcode可選項,那麼-errorcode的值將被預設設定為none,這個可選項返回的值也會被儲存在全域性變數errorcode中。

-errorinfoinfo

只有當-codetcl_error-errorinfo可選項會被特殊對待,

info是初始的堆疊,提供乙個可讀的額外資訊來標示錯誤發生的位置,這個堆疊跟蹤也會儲存在全域性變數errorinfo中。當提供了-code error可選項但是沒有-errorinfo可選項,tcl將會把它自己初始的堆疊值來配置-errorinfo

-levellevel

-level-code一起來配置返回**,

level值必須是乙個非負整數,來指定在呼叫第幾層的堆疊。如果沒有提供-level可選項,那麼預設

level值為1。

-optionsoptions

options的值必須是有效字元,整個options選項會作為乙個額外的選選項返回。

返回**使用tcl去控制程式流,乙個tcl指令碼就是一系列的tcl命令,所以命令返回tcl_ok,執行會繼續進行到指令碼的下乙個命令,如果異常返回**不是tcl_ok,那麼就會中斷繼續進行到指令碼下乙個命令的動作,指令碼會終止,並且把返回的異常資訊作為返回值返回,如果出現了breakcontinuereturn就會導致指令碼沒有執行完所有的命令就直接返回了。

一些tcl的內建命令會對這些異常進行特殊處理,例如,在迴圈中,while、forforeach這三個命令在迴圈體重執行命令,如果在迴圈體中出現了返回**為tcl_breaktcl_continue,迴圈命令將會重新執行,就相當於乙個breakcontinue命令在迴圈中的作用。

乙個簡單的例子,在乙個過程中使用return命令來中斷過程體:

proc printoneline {}
使用return來返回值:

proc returnx {} 

puts [returnx] ;#列印"x"

使用return -code error來匯報錯誤變元:

proc factorial   

if

set m [expr ]

set code [catch factor]

if

set product [expr ]

ifreturn$product

}

代替break命令:

proc mybreak {}
使用-level 0可選項,返回自己本身,可以替代break命令:

interp alias {} break {}return-level 0 -code break
使用catch命令來捕獲return -options返回的錯誤:

proc dosomething {}  result options

deallocate $resourcereturn-options $options $result

}

使用return可選項來建立乙個過程替代return命令本身:

proc myreturn   

set options [dict merge $args]

dict incr options -levelreturn-options $options $result

}

tcl tk參考 控制結構catch

catch 執行指令碼並捕獲錯誤 catchscript resultvarname?optionsvarname?catch命令用來防止出現錯誤而導致指令碼執行終止,catch命令可以呼叫tcl直譯器去執行指令碼,並且能夠正常返回。如果指令碼產生乙個錯誤,catch將返回乙個非0的整數,如果沒有捕...

tcl tk參考 控制結構update

update 處理掛起的事件和空閒 update?idletasks?這個命令用來給應用程式 更新 進入事件迴圈直到所有掛起的事件和空閒 都執行完畢。如果指定idletasks,就不處理新的事件或錯誤,只有空閒 被呼叫,這就導致操作被延遲了,就像顯示更新和視窗設計,會被立刻執行。當應用程式的狀態發生...

tcl tk參考 控制結構foreach

foreach 反覆迴圈操作乙個或多個列表的每個元素foreachvarname list body foreachvarlist1 list1 varlist2 list2 body foreach命令執行乙個迴圈,迴圈的變數是乙個或多個列表的元素。最簡單的情況下是乙個迴圈變數 varname和乙...