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

Vbscript TCL如何要求两个操作数在IF语句中确定结果,vbscript,tcl,Vbscript,Tcl,对TCL来说是个新手,似乎遇到了短路问题。来自vbscript,我能够正确地执行此操作,但是尝试转换为TCL脚本时,我遇到了短路副作用的问题,并且一直在尝试找到正确的方法来执行此操作 在下面的代码段中,我只想在双方都为true时执行“do something”,但由于短路,只有在第一个参数无法确定表达式的值时,它才会计算第二个参数 if {$basehour != 23 && $hours != 0} { do something } 也许我没有

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

在下面的代码段中,我只想在双方都为true时执行“do something”,但由于短路,只有在第一个参数无法确定表达式的值时,它才会计算第二个参数

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

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

在Tcl中,
&&
操作符总是进行短路操作(就像在C、Java和许多其他语言中一样)。如果您想要另一个版本,并且可以保证这两个子表达式都产生布尔值(例如,它们来自于您正在进行的相等测试),那么您可以使用
&
运算符,该运算符按位执行,并在处理布尔值时执行您想要的操作。如果要这样做,最好在子表达式周围加上括号,以保持清晰;虽然每个人都记得
==
相对于
&
的优先顺序,但w.r.t.
&
的顺序常常被忘记。(括号中的执行成本是免费的。)

但是,通常没有必要这样做。如果您想要一个,并且正在输入布尔测试(例如,
If
命令的表达式),那么没有理由不短路,就像在原始代码中一样;如果第一个子句给出false,那么第二个子句不会更改整个表达式生成的值

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