J'essaie de traiter un tuple, où l'un des cas est que les deux valeurs sont égales. Existe-t-il un moyen meilleur et plus concis de ? P> p> correspondant code> sur ce
3 Réponses :
Vous pouvez échanger les valeurs, puis comparer le tuple avec sa méthode normale-méthode:
Personnellement, je pense que la façon dont vous avez fait c'est génial, car c'est simple, intuitif et clair au lecteur ce qui se passe.
Cela dit, voici une façon de le faire sans comme ceci: p > si code> clause. Vous pouvez simplement correspondre à la version échangée, en utilisant des backtsks pour activer
q code> en identifiants stables. Comme @Luigi a souligné, vous pouvez simplement vérifier que
p code> correspondent
q code>: p>
def f(p: Int, q: Int) {
(p, q) match {
case (`q`, _) => println("Match!")
case _ => println("No")
}
}
f(1, 2) // "No"
f(1, 1) // "Match!"
Juste cas ('q', _) => code> (échange
' code> pour backticks) ferait ... Pas besoin de vérifier les deux
p == q code> et
q == p code>
Vous pouvez définir votre propre extracteur:
object Eq { def unapply[T](pair:(T,T)):Option[T] = if (pair._1 == pair._2) Some(pair._1) else None }