【发布时间】:2017-07-10 07:07:22
【问题描述】:
我想创建一个 tcl proc/ 命令,例如
[1] 应该返回 1
[2] 应该返回 2
.
.
[18999] 应该返回 18999
我应该如何编写一个 proc 来处理所有的数字命令
【问题讨论】:
标签: tcl
我想创建一个 tcl proc/ 命令,例如
[1] 应该返回 1
[2] 应该返回 2
.
.
[18999] 应该返回 18999
我应该如何编写一个 proc 来处理所有的数字命令
【问题讨论】:
标签: tcl
这是非常不推荐的!此外,您真的 不能通过一个命令来完成所有这些操作。但是,最简单的方法是更新unknown 过程以按需创建您需要的命令。修补unknown 需要一点小心。
proc unknown args [concat {
if {[llength $args] == 1 && [string is entier -strict [lindex $args 0]]} {
set TheNumber [lindex $args 0]
proc ::$TheNumber {} [list return $TheNumber]
return $TheNumber
# The semicolon on the next line is required because of the [concat]
};
} [info body unknown]]
只要它们的名称看起来与(完整的、扩展的)整数完全一样,这将使简单的过程按需进行。 (支持浮点数并不太难;只需编写一个稍微复杂一点的测试,该测试也使用string is double。)
但请注意,未知命令处理是一种缓慢的方法;这是 Tcl 在因为命令不存在而不得不抛出错误之前立即调用的机制。我们本可以让它直接返回值而不创建过程,但是每次调用它都会产生搜索不成功的开销;使程序加快速度。
完全不使用数字作为命令将进一步加快您的代码速度。
【讨论】: