dhg*_*dhg 22
就个人而言,我认为你做到这一点的方式很棒,因为它简单,直观,清晰,读者正在做什么.
也就是说,这是一种没有if条款就可以做到的方法.你可以匹配交换版本,使用反引号q变成稳定的标识符.正如@Luigi指出的,你可以检查p匹配q:
(p, q) match {
case (`q`, _) => println("Match!")
...
}
Run Code Online (Sandbox Code Playgroud)
像这样:
def f(p: Int, q: Int) {
(p, q) match {
case (`q`, _) => println("Match!")
case _ => println("No")
}
}
f(1, 2) // "No"
f(1, 1) // "Match!"
Run Code Online (Sandbox Code Playgroud)
您可以定义自己的提取器:
object Eq {
def unapply[T](pair:(T,T)):Option[T] =
if (pair._1 == pair._2) Some(pair._1) else None
}
Run Code Online (Sandbox Code Playgroud)
然后(4,4) match { case Eq(n) => println("same: " + n) }打印same: 4,(3,4)而不匹配.
我在我的博客中列出了一些比较提取器(抱歉,它是德语).
您可以交换值,然后将元组与其正常的equals方法进行比较:
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
Run Code Online (Sandbox Code Playgroud)