匹配一对相等的值

时间:2012-09-30 20:54:31

标签: scala tuples match

我正在尝试处理元组,其中一个案例是两个值相等。 {/ 1}}是否有更好,更简洁的方式而不是

match

3 个答案:

答案 0 :(得分:22)

就我个人而言,我认为你做到这一点的方式很棒,因为它简单,直观,清晰,读者会发生什么。

那就是说,没有if条款,这是你可以做到的一种方式。您可以匹配交换版本,使用反引号将q转换为稳定标识符。正如@Luigi指出的那样,您可以检查p匹配q

  (p, q) match {
    case (`q`, _) => println("Match!")
    ...
  }

像这样:

def f(p: Int, q: Int) {
  (p, q) match {
    case (`q`, _) => println("Match!")
    case _ => println("No")
  }
}

f(1, 2)   // "No"
f(1, 1)   // "Match!"

答案 1 :(得分:7)

您可以定义自己的提取器:

object Eq {
   def unapply[T](pair:(T,T)):Option[T] = 
      if (pair._1 == pair._2) Some(pair._1) else None
}

然后(4,4) match { case Eq(n) => println("same: " + n) }打印same: 4,而(3,4)则不匹配。

我在blog中列出了一些比较提取器(对不起,用德语)。

答案 2 :(得分:6)

您可以交换值,然后将元组与其正常的equals-method进行比较:

scala> val t = (1, 1)
t: (Int, Int) = (1,1)

scala> t.swap == t
res0: Boolean = true

scala> val t = (1, 2)
t: (Int, Int) = (1,2)

scala> t.swap == t
res1: Boolean = false