如何为数字编写tcl proc

时间:2017-07-10 07:07:22

标签: tcl

我想创建一个像blo一样的tcl proc /命令 [1]应该返回1
[2]应该返回2


[18999]应该返回18999

我应该如何编写一个proc来处理所有数字命令

1 个答案:

答案 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之前立即调用的机制,否则它将不得不抛出错误,因为命令不存在。我们本可以直接返回值而不创建过程,但是每当你调用它时,你都会有不成功搜索的开销;使程序加快速度。

根本不使用数字作为命令会使你的代码更快。