Tcl 如何将一个参数传递到另一个参数
我想传递一个参数(键值),键值内部可能包含like key(value1 value2…),value也可能是value1(data1 data2 data2)。格式如下所示Tcl 如何将一个参数传递到另一个参数,tcl,argument-passing,Tcl,Argument Passing,我想传递一个参数(键值),键值内部可能包含like key(value1 value2…),value也可能是value1(data1 data2 data2)。格式如下所示 proc find {args } { array set opt {-find "" } if {$opt(-find) == "?" } { .... puts "list of search items like google, msn" } if {$
proc find {args } {
array set opt {-find "" }
if {$opt(-find) == "?" } {
....
puts "list of search items like google, msn"
}
if {$opt(-find) == "google" } {
....
puts "...."
}
}
我正在尝试获取命令
find -find ?
displayresults google, msn....
find -find google
displayresults gmail....
find -find google gmail
results username pw ...
find -find google gmail pw
displayresults ....
找-找?
显示结果谷歌,msn。。。。
查找-查找谷歌
显示结果gmail。。。。
查找-查找谷歌gmail
结果用户名pw。。。
查找-查找谷歌gmail pw
显示结果。。。。
您需要的是
cmdline
包。这里有一个小例子,让你开始
package require cmdline
proc find {args} {
set flags {
{server.arg "" "Which server to search"}
}
array set options [cmdline::getoptions args $flags]
if {$options(server) eq "google"} {
puts "Search Google"
} elseif {$options(server) eq "?"} {
puts "Display Help"
}
}
# Example usages
find -server google one two three ;# Case 1: $options(server)=="google"
find -server ? ;# Case 2: display help
find ;# Case 3: no -server flag
find -server "google msn" one two ;# Case 3: $options(server)=="google msn"
讨论
- 我调用我的标志
,而不是-server
,我认为这更有意义-find
- 在用户不提供
标志的情况下,$options(server)是空字符串,-server
“”
- 其余的案例是不言自明的
开关
,因为这样在文本之间进行选择时会在内部构建一个哈希表。好主意。我使用if命令是因为OP可以轻松地使用它。我可以使用分层方法而不是package require cmdline吗?什么是分层方法?我如何以分层方式或树状结构使上述函数成为find-server google(…在此处执行操作)find-server google.gmail find-server google.gmail.username建议我不带软件包