我要对包含布尔值的元组进行大小写匹配。 在布尔looksexhautive上是否存在一种有效的方法来匹配结果以区分大小写
val ABC= "abc"
val DEF = "def"
private def istest1 = true
private def istest2 = true
private def istest3 = true
(istest1, istest2, istest3) match {
case (true, true, true)=>ABC
case (false, true, true) =>DEF
case (false , false , true)=> //print something else
//other cases
}
答案 0 :(得分:5)
您需要对每种可能的结果都有一个说明,并且使用match
似乎是最紧凑和易读的方法。
一项可能的改进是使用_
表示“无关”值:
(istest1, istest2, istest3) match {
case (true, true, true) => ABC
case (_, true, true) => DEF
case (false, _, true) => //print something
case _ => //other cases
}
这些测试的不同版本可能存在性能问题,但是最好选择最有意义的测试。旨在获得高于感知性能的可读性和可维护性。
答案 1 :(得分:-2)
您的方法似乎不错,但是鉴于您所有的值都是布尔值,您可以使用一些稳定的标识符来命名它们并使代码更具可读性
val ABC = "abc"
val DEF = "def"
def isTest1 = true
def isTest2 = true
def isTest3 = true
val PassedTest1 = true
val PassedTest2 = true
val PassedTest3 = true
val NotPassedTest1 = false
val NotPassedTest2 = false
(isTest1, isTest2, isTest3) match {
case (PassedTest1, PassedTest2, PassedTest3) => ABC
case (NotPassedTest1, _, PassedTest3) => DEF
case (NotPassedTest1, NotPassedTest2, PassedTest3) => //print something
case _ => ???
}
就像@Tim提到的那样,您可以使用_
来匹配元组中的任何值,或者将任何元组作为最后一种情况进行匹配,因此您不必太过讲究