class Contains(r: Range) { def unapply(i: Int): Boolean = r contains i }
val C1 = new Contains(3 to 10)
val C2 = new Contains(20 to 30)
scala> 5 match { case C1() => println("C1"); case C2() => println("C2"); case _ => println("none") }
C1
scala> 23 match { case C1() => println("C1"); case C2() => println("C2"); case _ => println("none") }
C2
scala> 45 match { case C1() => println("C1"); case C2() => println("C2"); case _ => println("none") }
none
Lưu ý rằng Chứa phiên bản phải được đặt tên bằng chữ cái đầu. Nếu không, bạn sẽ cần phải cung cấp tên ở phía sau dấu ngoặc kép (khó khăn ở đây, trừ khi có một lối thoát tôi không biết)
Nguồn
2010-07-01 19:43:23
nổi Xem stackoverflow câu hỏi liên quan: [một phạm vi có thể được xuất hiện trong Scala?] (Http: //stackoverflow.com/questions/1346127/can-a-range-be-matched-in-scala) –