Tcl proc的约定返回

时间:2015-10-08 05:17:59

标签: tcl

Tcl proc返回值的约定是什么? proc可以在正常终止的情况下返回一个值,这很好。但是例外呢?如果proc没有返回编程值,那么返回的值是多少?是' 0',' -1',' / dev / null',' True',' False' ?

2 个答案:

答案 0 :(得分:2)

  

但是例外呢?

如果您遇到错误,请使用error表示错误。它会创建一个异常条件,向外冒泡并且可以使用catch进行捕获。在Tcl 8.6中,您还可以使用throwtry / trap来执行此操作。

在某些情况下,return -code error更明确,因为这会使程序产生错误,而不是检测到问题的特定位置。

  

如果proc没有返回编程值,返回的值是多少?

通常的“无值”值是空字符串。如果您只是return,那就是实际值。您知道的许多Tcl命令(例如putsfor)将生成空字符串作为其结果。如果您以交互方式使用Tcl,则Tcl解释器循环不会为空结果打印任何内容。

答案 1 :(得分:1)

与Tcl的许多事情一样,惯例是多种多样的,务实的和宽容的。我们鼓励您使用例外(通过errorthrowreturn,主要是continuebreak进行迭代控制等,而不是返回表示出现问题的特殊值。

即便如此,返回

等值
  • 在命令结果范围之外的值(例如当范围为整数≥0时为-1)
  • 空字符串
  • 布尔值假(falseoffno或零)
当命令无法返回有用值时,通常会使用

从不返回有用值的命令,因为只有它们的副作用被认为有用(例如unset)几乎总是返回空字符串。

(请注意,返回字符串的命令没有超出范围的值,因为所有可能的值都是有效的字符串。)

有时使用特殊的返回值更有意义;其他时候提出错误更方便,如果对于没有经验的用户可能有点混乱。使用不存在的键进行字典访问就是一个例子。如果Tcl的值为null,则dict get $foo not-a-key可能会返回该值;相反,你会得到一个例外。

文档:breakcontinuedicterrorreturnthrowunset