match
è più specifico di uguaglianza; non puoi essere solo uguale, devi anche avere lo stesso tipo.
In questo caso, BigInt
non è un case class e non ha un metodo unapply
nel suo oggetto companion, quindi non è possibile abbinarlo direttamente. Il meglio che si possa fare è
BigInt(12) /% 7 match {
case (a: BigInt,b: BigInt) if (a==1 && b==5) => true
case _ => false
}
o qualche variante di esso (ad esempio case ab if (ab == (1,5)) =>
).
In alternativa, è possibile creare un oggetto con un metodo unapply di tipo appropriato:
object IntBig { def unapply(b: BigInt) = Option(b.toInt) }
scala> BigInt(12) /% 7 match { case (IntBig(1), IntBig(5)) => true; case _ => false }
res1: Boolean = true
fonte
2012-11-11 18:55:44
Il binding a variabili e una guardia è quello che ho fatto. Ho appena pensato che potrebbe forse essere fatto un po 'meglio. Grazie. – marcus