Tcl proc返回值的约定是什么? proc可以在正常终止的情况下返回一个值,这很好。但是例外呢?如果proc没有返回编程值,那么返回的值是多少?是' 0',' -1',' / dev / null',' True',' False' ?
答案 0 :(得分:2)
但是例外呢?
如果您遇到错误,请使用error
表示错误。它会创建一个异常条件,向外冒泡并且可以使用catch
进行捕获。在Tcl 8.6中,您还可以使用throw
和try
/ trap
来执行此操作。
在某些情况下,return -code error
更明确,因为这会使程序产生错误,而不是检测到问题的特定位置。
如果proc没有返回编程值,返回的值是多少?
通常的“无值”值是空字符串。如果您只是return
,那就是实际值。您知道的许多Tcl命令(例如puts
,for
)将生成空字符串作为其结果。如果您以交互方式使用Tcl,则Tcl解释器循环不会为空结果打印任何内容。
答案 1 :(得分:1)
与Tcl的许多事情一样,惯例是多种多样的,务实的和宽容的。我们鼓励您使用例外(通过error
,throw
或return
,主要是continue
和break
进行迭代控制等,而不是返回表示出现问题的特殊值。
即便如此,返回
等值false
,off
,no
或零)。 从不返回有用值的命令,因为只有它们的副作用被认为有用(例如unset
)几乎总是返回空字符串。
(请注意,返回字符串的命令没有超出范围的值,因为所有可能的值都是有效的字符串。)
有时使用特殊的返回值更有意义;其他时候提出错误更方便,如果对于没有经验的用户可能有点混乱。使用不存在的键进行字典访问就是一个例子。如果Tcl的值为null
,则dict get $foo not-a-key
可能会返回该值;相反,你会得到一个例外。