Tcl进程返回的约定

Tcl进程返回的约定,tcl,Tcl,Tcl proc返回值的约定是什么?在正常终止情况下,proc可以返回一个值,这很好。但是例外情况呢?如果proc没有返回任何编程值,那么返回什么好值?它是“0”、“1”、“0/dev/null”、“True”、“False”吗?与Tcl的许多东西一样,约定是多样的、实用的和允许的。我们鼓励您使用异常(通过error、throw或return,主要是continue和break进行迭代控制等),而不是返回指示出错的特殊值 即使如此,返回的值仍然是 命令结果范围之外的值(如范围为整数时为-1)≥

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

与Tcl的许多东西一样,约定是多样的、实用的和允许的。我们鼓励您使用异常(通过
error
throw
return
,主要是
continue
break
进行迭代控制等),而不是返回指示出错的特殊值

即使如此,返回的值仍然是

  • 命令结果范围之外的值(如范围为整数时为-1)≥0)
  • 空字符串
  • 布尔错误(
    false
    关闭
    ,或零)
通常在命令无法返回有用值时使用。从不返回有用值的命令,因为只有其副作用被认为是有用的(例如
unset
),几乎总是返回空字符串

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

有时使用特殊的返回值更有意义;其他时候,如果对没有经验的用户来说可能有点困惑,那么引发错误会更方便。例如,使用不存在的密钥访问字典。如果Tcl有一个
null
值,
dict get$foo not-a-key
可能会返回该值;相反,你会得到一个例外

文件:

但是例外情况呢

如果您有错误,请使用
error
指示错误。它创建了一个异常条件,该异常条件向外冒泡,可通过
catch
捕获。在TCL8.6中,您还可以使用
throw
try
/
trap
来执行此操作

在某些情况下,执行
return-code error
更为清晰,因为这会使过程产生错误,而不是在其中检测到问题的特定位置

如果proc没有返回任何编程值,那么返回什么好值

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

您可以看看?