当我要在我的代码中使用“ keylset ”时,会出现错误 “无效的命令名称”keylset“”< / EM>
set list1 "a 1 b 2 c 3 d 4"
for {set i 0} {$i < [llength $list1]} {incr i} {
keylset klist [lindex $list1 $i] [lindex $list1 [expr $i+1]]
set klist
}
puts $klist
请给我一些解决方案。
答案 0 :(得分:2)
键控列表命令是TclX扩展包的一部分。 为了使它们出现在您的脚本中,您必须发出以下命令(它将安排加载相关的共享库并提供要获取的脚本)。
# Note the lower-case 'x', an annoying inconsistency but too late to fix it now...
package require Tclx
# your script here
set list1 "a 1 b 2 c 3 d 4"
for {set i 0} {$i < [llength $list1]} {incr i} {
keylset klist [lindex $list1 $i] [lindex $list1 [expr $i+1]]
set klist
}
puts $klist
安装扩展程序包的方式取决于您使用的Tcl分布。如果您正在使用Debian(或其衍生产品),您可能会这样做:
sudo apt-get install tclx8.4
如果您使用的是ActiveTcl发行版,请改为:
teacup update
安装许多软件包的当前版本,其中包括TclX。您可能需要在Windows上的提升命令shell中执行此操作,或在OSX上使用sudo
作为前缀。
如果您使用的是OSX并使用MacPorts,则tclx
位于MacPorts系统中(也是正确的版本)。
sudo port install tclx
由于有许多可能的发行版,或者你可以自己从源代码构建它,你需要仔细指定你的平台和设置是什么,如果它不是我上面列出的那个。
答案 1 :(得分:0)
您确定您的代码是否正确?它给出了结果
{a 1} {1 b} {b 2} {2 c} {c 3} {3 d} {d 4} {4 {}}
那是你想要的吗?如果你打算得到
{a 1} {b 2} {c 3} {d 4}
你应该在每次迭代中将i
的值增加2(incr i 2
)。
您可以通过这种方式获得相同的结果(需要Tcl 8.5或更高版本):
set klist [lmap {a b} "a 1 b 2 c 3 d 4" {list $a $b}]
或by(需要Tcl 8.6和TclX包)
keylset klist {*}"a 1 b 2 c 3 d 4"
对于旧版本,这可以做同样的事情:
set klist [list]
foreach {a b} "a 1 b 2 c 3 d 4" {
lappend klist [list $a $b]
}
文档:foreach,lappend,list,lmap,set,{*}
对于TclX文档,this似乎是一个很好的起点。