Tcl foreach 循环找不到第二个变量
Tcl foreach loop not finding second variable
我确定之前有人在这里问过这个问题,但我似乎找不到任何 link 可以帮助我解决我的特定问题。
我正在 vmd 中使用 tcl 脚本来进行快速分析。
package require pbctools
set wat [atomselect top "segid HETA"]
set pbcbox [pbc get -now]
set Lz [lindex [lindex $pbcbox 0] 2]
set Qwat 0
puts [$wat get charge]
foreach i{$wat get z} j{$wat get charge} {set $Qwat [expr $Qwat + $j * ($i + 0.5 * $Lz) / $Lz]}
#puts $Qwat
当我 运行 这个脚本时,我得到错误:
atomselect 0 表明它设置得很好,100.608742 是盒子 Lz 的长度,它正在寻找每个原子的电荷(有 4 个原子,每个原子带负电荷)。
然而,它在这个 foreach 循环中失败了,我希望它按位置迭代并同时收费。所以列表 1 中的第 1 行和列表 2 中的第 1 行。我已经尝试了我能想到的每个语法迭代,但我似乎无法让这个表达式在 foreach 循环中工作。
我哪里做错了?
问题是您缺少一些空格,以便 Tcl 理解您想要的内容。
因此 foreach i{$wat get z} j{$wat get charge} {}
创建了 3 个变量(假设 $wat 是“atomselect0”):
- “i{atomselect0”,值为“get”
- “z}”,值为“j{atomselect0”
- “get”,值为“charge}”
如您所见,没有变量“j”。
我对你想要的东西的猜测可能是这样的:
foreach i [$wat get z] j [$wat get charge] {
set $Qwat [expr {$Qwat + $j * ($i + 0.5 * $Lz) / $Lz}]
}
(除了一些不寻常的情况,通常建议你表达得更清楚。所以我也做了那个改变,虽然这不是绝对必要的。)
我确定之前有人在这里问过这个问题,但我似乎找不到任何 link 可以帮助我解决我的特定问题。
我正在 vmd 中使用 tcl 脚本来进行快速分析。
package require pbctools
set wat [atomselect top "segid HETA"]
set pbcbox [pbc get -now]
set Lz [lindex [lindex $pbcbox 0] 2]
set Qwat 0
puts [$wat get charge]
foreach i{$wat get z} j{$wat get charge} {set $Qwat [expr $Qwat + $j * ($i + 0.5 * $Lz) / $Lz]}
#puts $Qwat
当我 运行 这个脚本时,我得到错误:
然而,它在这个 foreach 循环中失败了,我希望它按位置迭代并同时收费。所以列表 1 中的第 1 行和列表 2 中的第 1 行。我已经尝试了我能想到的每个语法迭代,但我似乎无法让这个表达式在 foreach 循环中工作。
我哪里做错了?
问题是您缺少一些空格,以便 Tcl 理解您想要的内容。
因此 foreach i{$wat get z} j{$wat get charge} {}
创建了 3 个变量(假设 $wat 是“atomselect0”):
- “i{atomselect0”,值为“get”
- “z}”,值为“j{atomselect0”
- “get”,值为“charge}”
如您所见,没有变量“j”。 我对你想要的东西的猜测可能是这样的:
foreach i [$wat get z] j [$wat get charge] {
set $Qwat [expr {$Qwat + $j * ($i + 0.5 * $Lz) / $Lz}]
}
(除了一些不寻常的情况,通常建议你表达得更清楚。所以我也做了那个改变,虽然这不是绝对必要的。)