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 的在线材料或书籍。
复杂的参数解析可以用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
。