2015-10-08 87 views
1

TCL proc返回值的約定是什麼? proc可以在正常的終止情況下返回一個值,這就是fiune。但是例外情況呢?如果proc不返回任何編程值,返回什麼值?它是'0','-1','/ dev/null','True','False'?TCL proc返回值的約定

感謝, 格特

+0

你可以看看https://www.tcl.tk/man/tcl8.6/TclCmd/return.htm#M5? – Dinesh

回答

2

但對於異常?

如果您有錯誤,請使用error來表示它。它會創建一個異常情況,並向外冒泡,並可能被catch困住。在Tcl 8.6中,您也可以使用throwtry/trap來執行此操作。

在某些情況下,執行return -code error會更清楚,因爲這會導致過程產生錯誤,而不是檢測到問題的特定位置。

如果proc不返回任何編程值,返回什麼值?

通常的「無值」值是空字符串。如果你只是做return,那就是實際價值。你知道的許多Tcl命令(例如,putsfor)將產生空字符串作爲其結果。如果你交互地使用Tcl,Tcl解釋器循環不會打印任何空結果。

1

對於很多事情TCL,慣例是多種多樣的,務實和寬容。鼓勵您使用例外(通過error,throwreturn,主要還有用於迭代控制的continuebreak等),而不是返回指示出現問題的特殊值。

即使如此,返回的值,如該命令的結果的範圍之外

  • 值(例如-1時的範圍爲整數≥0)
  • 空字符串
  • 布爾假(falseoff,no或零)

通常用於命令無法返回有用值時。命令從來沒有返回有用的值,因爲只有他們的副作用被認爲是有用的(如unset)幾乎總是返回空字符串。

(請注意,命令返回一個字符串具有外的範圍內,沒有價值,因爲所有可能的值是有效的字符串。)

有時它只是更有意義,使用特殊的返回值;其他時間提高錯誤更方便,如果可能讓沒有經驗的用戶感到困惑。使用不存在的密鑰進行字典訪問就是一個例子。如果Tcl的值爲null,則dict get $foo not-a-key可能會返回該值;相反,你會得到一個例外。

文檔:breakcontinuedicterrorreturnthrowunset