在一段时间的条件中,我正在读取分配,然后测试一个变量作为布尔表达式。
假设我正在读取一个文件并想丢弃注释行。但下面的代码不会进入循环。puts 永远不会打印。
while {[gets $fp line] >= 0 && [regexp {^#} $line] ==0} {
puts "Got valid data"
}
似乎行的获取分配和它的评估不能处于同一条件中。这在 TCL 规范中得到证实了吗?
当然,这个方法可行,但我希望在一个语句中完成条件判断。
while {[gets $fp line] >= 0 } {
if {[regexp {^#} $line] == 0 } {
puts "Got valid data"
}
}
干杯。
正如@glennjackman所说,逻辑是有缺陷的。
这是一个使用函数读取/过滤输入的简单示例
希望这有帮助。
您无法在条件内跳过循环迭代;此时
while
没有针对异常的处理程序。(通常它们会被编译为跳转。)在主体内部使用是惯用的。continue
if
while