如何使用选项创建 Tcl 程序?

Jee*_*esh 2 procedure tcl options

我想用一些选项创建 tcl 过程。我知道带有参数和可选参数的过程,但不知道选项。例如,如果我以以下三种方式调用我的过程 arith(-add 表示加法,-sub 表示减法):

1) arith 10 5 
2) arith -add 10 5   or   arith 10 5 -add
3) arith -sub 10 5   or   arith 10 5 -sub
Run Code Online (Sandbox Code Playgroud)

分别输出应该是1) 15 (默认应该加), 2) 15, 3) 5

如何在Tcl中编写此程序?我是 tcl 的新手,请给我推荐一些关于 Tcl 的在线材料或书籍。

Don*_*ows 5

复杂的参数解析可以用cmdline来完成,它是 Tcllib 的一部分。关键命令是::cmdline::getoptions,它从变量中提取选项并返回描述它们的字典。它还修改变量,使其仅包含剩余的参数。

package require cmdline
proc arith args {
    set options {
        {op.arg "add" "operation to apply (defaults to 'add')"}
    }
    array set parsed [::cmdline::getoptions args $options]
    if {[llength $args] != 2} {
        return -code error "wrong # args: must be \"arith ?-op operation? x y\""
    }
    switch $parsed(op) {
        add {return [::tcl::mathop::+ {*}$args]}
        sub {return [::tcl::mathop::- {*}$args]}
        default {
            return -code error "Unknown -op \"$parsed(op)\": must be add or sub"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

演示用法(包括一些错误情况):

% arith 
wrong # args: must be "arith ?-op operation? x y"
% arith 2 3
5
% arith -op sub 2 3
-1
% arith -op mult 2 3
Unknown -op "mult": must be add or sub
Run Code Online (Sandbox Code Playgroud)

需要注意的主要事情是,如果您还想传递参数,则选项描述符采用不带前导-和末尾 的选项名称.arg