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
Beachten Sie, dass Contains-Instanzen mit Anfangsbuchstaben benannt werden sollten. Wenn Sie dies nicht tun, müssen Sie den Namen in Back-Zitate (schwer hier, es sei denn, eine Flucht ist, weiß ich nicht) geben
eine verwandte Stackoverflow Frage Siehe: [Kann ein Bereich, in Scala angepasst werden?] (Http: //stackoverflow.com/questions/1346127/can-a-range-be-matches-in-scala) –