我想创建一个像blo一样的tcl proc /命令
[1]应该返回1
[2]应该返回2
。
。
[18999]应该返回18999
我应该如何编写一个proc来处理所有数字命令
答案 0 :(得分:3)
这非常不推荐!此外,您无法真正制作一个命令来执行所有这些操作。但是,最简单的方法是更新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之前立即调用的机制,否则它将不得不抛出错误,因为命令不存在。我们本可以直接返回值而不创建过程,但是每当你调用它时,你都会有不成功搜索的开销;使程序加快速度。
根本不使用数字作为命令会使你的代码更快。