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