我正在尝试编写一个 tcl 程序,它执行以下操作 -
proc myProc {arg1 def1} {arg2 def2} {
...
...
}
tcl> myProc -arg1 val1 -arg2 val2
arg1 variable has val1
arg2 variable has val2
tcl> myProc -arg1 val1
arg1 variable has val1
arg2 variable has def2
tcl> myProc -?
myProc -arg1 <value1> -arg2 <value2>
arg1 - required argument [default value is 10]
arg2 - optional argument [default value is 20]
help - print this message
? - print this message
tcl可以实现这个功能吗?
我查了一些被问到的问题,我看到的是这个question https://stackoverflow.com/questions/31110082/how-to-create-tcl-proc-with-hyphen-flag-arguments?rq=1。这部分满足了我的要求,但我找不到任何可以帮助我解决问题的东西。请指导我!
阅读proc http://tcl.tk/man/tcl8.6/TclCmd/proc.htm仔细查看手册页:参数列表必须是单个列表。你当时在想这个:
% proc myproc {{a 42} {b 54}} { puts "a=$a b=$b" }
% myproc
a=42 b=54
% myproc 1
a=1 b=54
% myproc 1 2
a=1 b=2
请注意,第一个参数被分配给a
-- 你不能提供一个值b
并使用默认值a
用这个方法。
要使用类似命令行的选项,最简单的方法是:
% proc myproc {args} {
array set data [list -a 42 -b 54 {*}$args]
puts "a=$data(-a) b=$data(-b)"
}
% myproc
a=42 b=54
% myproc -a 1
a=1 b=54
% myproc -b 2
a=42 b=2
% myproc -b 2 -a 3
a=3 b=2
% myproc -c 4
a=42 b=54
此方法的一个问题是您必须传递偶数个参数,或者array set
会抛出错误:
% myproc 12
list must have an even number of elements
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)