File: complicatedmatch.scala

package info (click to toggle)
scala 2.11.12-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 62,924 kB
  • sloc: javascript: 28,808; java: 13,415; xml: 3,135; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (31 lines) | stat: -rw-r--r-- 705 bytes parent folder | download | duplicates (4)
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
object Bar{
  def unapply(x : String) = x == "bar";
}

object Even{
  def unapply(x : Int) = if (x % 2 == 0) Some(x / 2) else None;
}

object Test extends App{
  val LongWord = "supercalifragilisticexpialidocious";

  def foo(x : Int, y : String) : Int = (x, y) match {
    case (Even(i), "bar") => 1
    case (1 | 2 | 3, "foo") => 42;
    case (x, y) if y.length < x => 11;
    case (1 | 2 | 3, Bar()) => 7;
    case (1 | 2 | 3, "bar") => 8
    case (Even(Even(3)), Bar()) => 13;
    case (Even(Even(3)), LongWord) => 13;
    case _ => 0;
  }

  List(
    2 -> "bar",
    2 -> "foo",
    3 -> "foo",
    7 -> "flob",
    3 -> "bar",
    12 -> LongWord
  ).foreach({case (x, y) => println(foo(x, y))});
}