如何在groovy switch语句中放置多个变量?



如何在groovy switch语句中放置多个变量?如。如果任何变量为false,它将打印&;false&;否则打印"真实"。下面的脚本不起作用

a=true
b=true
c=true
switch(true)
{
case(a==true && b==true && c==true)
println("true")
break
case(a==false || b==false || c==false)
println("false")
break   
}

switch语句用于针对多个条件测试单个值。

虽然switch语句是通用的,但当测试多个变量时,普通的旧if/else更合适:

if( a && b && c ) { println 'true' }
else              { println 'false' }

或者您可以使用in(成员)操作符。它测试LHS操作数(值)是否包含在RHS操作数(集合)中。

if( false in [a,b,c] ) { println 'false' }
else                   { println 'true' }

可以执行如下操作,创建一个结合了三个变量的函数并打开它。但我不会推荐它;组合函数是一个不必要的新元素,很容易出错。您最好使用一系列if/else语句。

a = true
b = true
c = true
switch(a.toString() + b.toString() + c.toString())
{
case "truetruetrue":
println("true")
break
case "falsefalsefalse":
println("false")
break   
default:
println("a different combination")
break
}

Groovy Web Console

您可以使用groovy.lang.Tuple:

a = true
b = true
c = true
switch (new Tuple(a, b, c)) {
case [new Tuple(true, true, true)]:
println "All true!"
break
case [new Tuple(true, false, true)]:
println "b is false"
break
default:
println "Something else"
}

这里有一个警告:奇怪的是,Tupleextends java.util.AbstractList因此是一个可迭代的"集合"AbstractList。如果你给传递一个集合case标签- groovy将尝试做一个"in list"元素成员检查。意思是switch ("bar") { case ["foo", "bar", "buzz"]: ...}-将触发。

因此,您需要将case-labels中的具体元组包装成一个单例列表:
case [new Tuple(true, true, true)]notcase new Tuple(true, true, true).

最新更新