【发布时间】:2014-05-15 07:58:44
【问题描述】:
for { set i 0.05 } { $i < 0.5 } { set i [expr { $i+0.05 } ] } {
puts "I inside first loop: $i"
}
当我运行以上代码行时,我会得到以下错误 错误:缺少右大括号
这里有什么问题?
【问题讨论】:
标签: tcl
for { set i 0.05 } { $i < 0.5 } { set i [expr { $i+0.05 } ] } {
puts "I inside first loop: $i"
}
当我运行以上代码行时,我会得到以下错误 错误:缺少右大括号
这里有什么问题?
【问题讨论】:
标签: tcl
该代码对我“有效”。
% for { set i 0.05 } { $i < 0.5 } { set i [expr { $i+0.05 } ] } {
puts "I inside first loop: $i"
}
I inside first loop: 0.05
I inside first loop: 0.1
I inside first loop: 0.15000000000000002
I inside first loop: 0.2
I inside first loop: 0.25
I inside first loop: 0.3
I inside first loop: 0.35
I inside first loop: 0.39999999999999997
I inside first loop: 0.44999999999999996
I inside first loop: 0.49999999999999994
我猜测您遇到问题的真实代码与它并不完全相同,并且它在某处缺少}。寻找此类事情的最佳方法是使用进行括号匹配的程序员编辑器(它们几乎都这样做;我确定 vim、emacs 和 Eclipse 会这样做)并查看您的代码在哪里有括号(或括号或大括号)与您期望的不匹配。然后,您可以向内深入查找与您想要的不匹配的最里面的括号;可能是缺少它的那对。
仅供参考,Tcl 对 {…} 匹配非常严格,对 […] 匹配相当严格,而且对于 (…) 匹配通常很容易(尽管表达式和数组变量处理可能不同意)。
你的循环最好写成:
for {set ii 1} {[set i [expr {$ii * 0.05}]] < 0.5} {incr ii} {
puts "I inside first loop: $i"
}
甚至:
for {set ii 1} {$ii < 10} {incr ii} {
set i [expr {$ii / 20.0}]
puts "I inside first loop: $i"
}
原因与计算机执行浮点运算的方式有关,对 Tcl 一点也不特别;您在 C 和 C++ 以及 Java 和 C# 中遇到 相同 问题以及......
【讨论】: