match
là cụ thể hơn sự bình đẳng; bạn không thể bằng nhau, bạn cũng phải có cùng loại.
Trong trường hợp này, BigInt
không phải là lớp vỏ và không có phương thức unapply
trong đối tượng đồng hành của nó, vì vậy bạn không thể trực tiếp khớp với nó. Điều tốt nhất bạn có thể làm là
BigInt(12) /% 7 match {
case (a: BigInt,b: BigInt) if (a==1 && b==5) => true
case _ => false
}
hoặc một số biến thể của chúng (ví dụ: case ab if (ab == (1,5)) =>
).
Ngoài ra, bạn có thể tạo ra một đối tượng với một phương pháp unapply loại thích hợp:
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
Nguồn
2012-11-11 18:55:44
Ràng buộc với biến và bảo vệ là những gì tôi đã làm. Tôi chỉ thaught nó có lẽ có thể được thực hiện tốt hơn một chút. Cảm ơn bạn. – marcus