Scala Examples

From Celeste@Hoppinglife
Jump to navigation Jump to search

Pattern Matching on Seq

<syntaxhighlight lang="scala">

def f(ints: Seq[Int]): String = ints match {

 case Seq() =>
     "The Seq is empty !"
 case Seq(first) =>
     s"The seq has exactly one element : $first"
 case Seq(first, second) =>
     s"The seq has exactly two elements : $first, $second"
 case  s @ Seq(_, _, _) => 
     s"s is a Seq of length three and looks like ${s}"  // Note individual elements are not bound to their own names.
 case s: Seq[Int] if s.length == 4 =>
     s"s is a Seq of Ints of exactly length 4"  // Again, individual elements are not bound to their own names.
 case _ =>
     "No match was found!"

}

def f(ints: Seq[Int]): String = ints match {

 case Seq(first, second, tail @ _*) =>
     s"The seq has at least two elements : $first, $second. The rest of the Seq is $tail"
 case Seq(first, tail @ _*) =>
     s"The seq has at least one element : $first. The rest of the Seq is $tail"
 // alternative syntax
 // here of course this one will never match since it checks
 // for the same thing as the one above
 case first +: tail =>
     s"The seq has at least one element : $first. The rest of the Seq is $tail"
 case _ =>
     "The seq didn't match any of the above, so it must be empty"

}

</synctaxhighlight>