tcl / tk,将两个条件合并为一个语句

时间:2017-10-04 18:39:06

标签: tcl

我想在一个if语句中组合两个条件,并避免使用elseif。现在我有这样的事情:

if { [getmass] < 22 || [getmass] > 23 } {
  dropatom ;
  continue
} 

我想制作两个条件,其中[getmass]将在两个不同的范围内,大约22和35左右。是否可以将它组合在if下的一个语句中?

基本上我想要大概像[getmass]!= 22 || [getmass]!= 35,但实际数字不是精确整数,它们是22.989 ......和35.453 ...因此我使用22和23作为第一个条件,35和36作为第二个条件。但我想知道是否有办法将其合并为一个简短的陈述?

2 个答案:

答案 0 :(得分:0)

您的要求并不完全清楚,但我从这样的事情开始:

proc between {value min max} {
    expr {$min <= $value && $value <= $max}
}

set mass [getmass]
if {[between $mass 22 23] || [between $mass 35 36]} {
    puts "I don't like this value: $mass"
} else {
    puts "this is OK: $mass"
}

答案 1 :(得分:0)

<运算符(及其朋友)是严格的二元运算符。但是,您可以使用命令变体(在tcl::mathop命名空间中),因为 允许链接。在这种情况下,使用tcl::mathop::<=来确定范围内的值是否为else子句涵盖不包含的情况:

if {[tcl::mathop::<= 22 [getmass] 23]} {
    # puts "the mass is in the range we like"
} else {
    dropatom
    continue
}