在下面的代码片段中,我想执行"做一些事情"只有当双方都是真的,但由于短路,如果第一个参数未能确定表达式的值,它将仅评估第二个参数。
if {$basehour != 23 && $hours != 0} {
do something
}
也许我没有找到正确的东西,但到目前为止我还是找不到解决办法。任何提示将不胜感激。
答案 0 :(得分:0)
&&
运算符总是在Tcl中进行短路(就像在C和Java以及其他一些语言中一样)。如果你想要另一个版本,并且可以保证两个子表达式都会产生布尔值(例如,它们来自你正在做的等式测试),那么你可以使用&
运算符来代替 - 明智的,并且在做bools工作时会做你想做的事。如果您正在这样做,为了清楚起见,在子表达式周围加上括号是明智的;虽然每个人都记得==
关于&&
的优先顺序,但顺序为w.r.t. &
经常被遗忘。 (括号在执行成本方面是免费的。)
if {($basehour != 23) & ($hours != 0)} {
do something
}
但是,通常没有必要这样做。如果你想要一个你正在进入布尔测试的AND(例如,if
命令的表达式),那么没有理由不进行短路,与原始代码一样;如果第一个句子给出错误,则第二个句子不会改变整个表达式产生的值。