在scala中区分具有布尔值的元组的有效方法

时间:2018-12-24 06:43:22

标签: scala

我要对包含布尔值的元组进行大小写匹配。 在布尔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
} 

2 个答案:

答案 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提到的那样,您可以使用_来匹配元组中的任何值,或者将任何元组作为最后一种情况进行匹配,因此您不必太过讲究