1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
final class StringExtract(val s: String) extends AnyVal {
def isEmpty = (s eq null) || (s == "")
def get = this
def length = s.length
def lengthCompare(n: Int) = s.length compare n
def apply(idx: Int): Char = s charAt idx
def head: Char = s charAt 0
def tail: String = s drop 1
def drop(n: Int): StringExtract = new StringExtract(s drop n)
override def toString = s
}
final class ThreeStringExtract(val s: String) extends AnyVal {
def isEmpty = (s eq null) || (s == "")
def get: (List[Int], Double, ThreeStringExtract) = ((s.length :: Nil, s.length.toDouble, this))
def length = s.length
def lengthCompare(n: Int) = s.length compare n
def apply(idx: Int): Char = s charAt idx
def head: Char = s charAt 0
def tail: String = s drop 1
def drop(n: Int): ThreeStringExtract = new ThreeStringExtract(s drop n)
override def toString = s
}
object Bippy {
def unapplySeq(x: Any): StringExtract = new StringExtract("" + x)
}
object TripleBippy {
def unapplySeq(x: Any): ThreeStringExtract = new ThreeStringExtract("" + x)
}
object Test {
def f(x: Any) = x match {
case Bippy('B' | 'b', 'O' | 'o', 'B' | 'b', xs @ _*) => xs
case _ => "nope"
}
def g(x: Any): String = x match {
case TripleBippy(3 :: Nil, 3.0, 'b', chars @ _*) => "1: " + chars
case TripleBippy(5 :: Nil, 5.0, 'b' | 'B', chars @ _*) => "2: " + chars
case TripleBippy(_, _, chars @ _*) => "3: " + chars
case _ => "nope"
}
def main(args: Array[String]): Unit = {
println(f("Bobby"))
println(f("BOBBY"))
println(f("BoBoTheClown"))
println(f("TomTomTheClown"))
println(g("bob"))
println(g("bobby"))
println(g("BOBBY"))
println(g("BOBO"))
println(g("TomTomTheClown"))
}
}
|