TCL如何要求两个操作数在IF语句中确定结果

时间:2014-11-21 20:52:50

标签: vbscript tcl

似乎是TCL的新手并遇到短路问题。来自vbscript,我能够正确地执行此操作,但是尝试转换为TCL脚本我遇到了短路副作用的问题,并且一直试图找到正确的方法。< / p>

在下面的代码片段中,我想执行&#34;做一些事情&#34;只有当双方都是真的,但由于短路,如果第一个参数未能确定表达式的值,它将仅评估第二个参数。

    if {$basehour != 23 && $hours != 0} {
        do something
    }

也许我没有找到正确的东西,但到目前为止我还是找不到解决办法。任何提示将不胜感激。

1 个答案:

答案 0 :(得分:0)

&&运算符总是在Tcl中进行短路(就像在C和Java以及其他一些语言中一样)。如果你想要另一个版本,并且可以保证两个子表达式都会产生布尔值(例如,它们来自你正在做的等式测试),那么你可以使用&运算符来代替 - 明智的,并且在做bools工作时会做你想做的事。如果您正在这样做,为了清楚起见,在子表达式周围加上括号是明智的;虽然每个人都记得==关于&&的优先顺序,但顺序为w.r.t. &经常被遗忘。 (括号在执行成本方面是免费的。)

if {($basehour != 23) & ($hours != 0)} {
    do something
}

但是,通常没有必要这样做。如果你想要一个你正在进入布尔测试的AND(例如,if命令的表达式),那么没有理由不进行短路,与原始代码一样;如果第一个句子给出错误,则第二个句子不会改变整个表达式产生的值。