Monday 12 November 2012

Scala - Pattern Matching


                Pattern matching is the most widely used feature of Scala.Scala provides great support for pattern matching for processing the messages. A pattern match includes a sequence of alternatives, each starting with the keyword case. Each alternative includes a pattern and one or more expressions, which will be evaluated if the pattern matches.An arrow symbol => separates the pattern from the expressions.


object Test {
       def main(args: Array[String]) {
              println(matchTest(3))
                 }
       def matchTest(x: Int): String = x match {
             case 1 => "one"
             case 2 => "two"
             case _ => "many"
             }
      }

             The block with the case statements defines a function which maps integers to strings. The match keyword provides a convenient way of applying a function (like the pattern matching function above) to an object. Following is an example which matches a value against patterns of different types:



object Test {
        def main(args: Array[String]) {
                println(matchTest("two"))
                println(matchTest("test"))
                println(matchTest(1))
               }
        def matchTest(x: Any): Any = x match {
                case 1 => "one"
                case "two" => 2
                case y: Int => "scala.Int"
                case _ => "many"
               }
       }

                   The first case matches if x refers to the integer value 1. The second case matches if x is equal to the string"two". The third case consists of a typed pattern; it matches against any integer and binds the selector value x to the variable y of type integer. Following is another form of writing same match...case expressions with the help of braces {...}:



object Test {
        def main(args: Array[String]) {
                println(matchTest("two"))
                println(matchTest("test"))
                println(matchTest(1))
                  }
       def matchTest(x: Any){
              x match {
              case 1 => "one"
              case "two" => 2
              case y: Int => "scala.Int"
              case _ => "many"
                    }
              }
       }



No comments:

Post a Comment