conditional - Tcl:保证布尔表达式的评估顺序?
问题描述
假设我有一个条件 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 中是确定性的。但我想知道这是否会在其他条件/版本/操作系统下中断。
解决方案
是的,||
and&&
运算符是 TCL 中的“短路”运算符。这意味着您可以依赖从左到右对它们进行评估,并且一旦知道表达式的值,该评估就会停止。
推荐阅读
- java - 如何将“下拉”列表的数据从 JSP 存储到我们的 MySql 数据库?
- aem-6 - 如何获取 AEM DAM 中存在的所有资产列表
- spring - Spring拦截器和AuthenticationFilter的执行顺序
- python - 如何将vertica与apache超集连接?
- javascript - jquery - 对于包含字符串禁用按钮的每一行
- php - 如何在幻灯片中更改标题照片
- graphql - 从浏览器连接到 apollo graphQL 服务器时出现 404 错误
- arcore - ARCore:如何在任意像素处获得深度(与相机的距离)?
- node.js - Outlook-Web 加载项中的事件和 COM 加载项类似操作
- docker - Docker:runc:[2:INIT] 是什么意思?