Tcl:布尔表达式的保证评估序列?
Tcl : Guaranteed evaluation sequence of a boolean expression?
假设我有一个条件 Tcl 表达式,它是步骤的布尔组合。
- 表达式是否总是从左到右求值(不包括括号)?
- 如果表达式为真,其余的计算会停止吗?
我有一段代码可以解析文件并有条件地替换行中的内容。
set fp [ open "file" ]
set data [ read $fp ]
close $fp
foreach line [ split $data \n ] {
if { $enable_patch && [ regsub {<some_pattern>} $line {<some_other_pattern>} line ]} {
puts $outfp $line
<do_some_more_stuff>
}
}
所以我的问题是,除非 enable_patch
为真,否则我不想修改该行。现在我的测试表明代码在 Linux 上的 Tcl 8.5 中是确定性的。但我想知道这是否会在其他条件/版本/操作系统下中断。
是的,||
和 &&
运算符是 TCL 中的 "short-circuiting" 运算符。这意味着您可以依赖从左到右对它们进行求值,并且一旦知道表达式的值,求值就会停止。
假设我有一个条件 Tcl 表达式,它是步骤的布尔组合。
- 表达式是否总是从左到右求值(不包括括号)?
- 如果表达式为真,其余的计算会停止吗?
我有一段代码可以解析文件并有条件地替换行中的内容。
set fp [ open "file" ]
set data [ read $fp ]
close $fp
foreach line [ split $data \n ] {
if { $enable_patch && [ regsub {<some_pattern>} $line {<some_other_pattern>} line ]} {
puts $outfp $line
<do_some_more_stuff>
}
}
所以我的问题是,除非 enable_patch
为真,否则我不想修改该行。现在我的测试表明代码在 Linux 上的 Tcl 8.5 中是确定性的。但我想知道这是否会在其他条件/版本/操作系统下中断。
是的,||
和 &&
运算符是 TCL 中的 "short-circuiting" 运算符。这意味着您可以依赖从左到右对它们进行求值,并且一旦知道表达式的值,求值就会停止。