10
votes

Correspondre sur une paire de valeurs égales

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 correspondant sur ce xxx

?


0 commentaires

3 Réponses :


6
votes

Vous pouvez échanger les valeurs, puis comparer le tuple avec sa méthode normale-méthode: xxx


0 commentaires

22
votes

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 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> xxx pré>

comme ceci: 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!"


1 commentaires

Juste cas ('q', _) => (échange ' pour backticks) ferait ... Pas besoin de vérifier les deux p == q et q == p



7
votes

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
}


0 commentaires