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
Notez que contient des instances doit être nommé avec une majuscule initiale. Si vous ne le faites pas, vous devrez donner le nom apostrophes (difficile ici, à moins qu'il ya une fuite, je ne sais pas)
Voir une question stackoverflow liée: [une gamme peut être adaptée à Scala?] (Http: //stackoverflow.com/questions/1346127/can-a-range-be-matched-in-scala) –