Scala模式匹配语法讲解

scala中的模式匹配,类似于java中的 switch-case 语法,它有三种实现:

(1)x match(arg:type) - case XXXX => {…} case YYYY

(2)使用样例类实现模式匹配

(3)使用偏函数实现模式匹配


——————

(1)x match(arg:type) - case XXXX => {…} case YYYY

scala的模式匹配规则:只要发现有一个匹配的case,其余的case就不会继续匹配了


【例一】

object ScalaPatternTest1 {

    //参数是整型. 返回值类型是字符串。具体返回的字符串由匹配的参数值来决定

    def test_match(x:Int) :String = x match {

        case 0 => "It's empty"

        case 1 => "It has one"

        case _ => "More than one"// 默认通配选项,即“未匹配到任一个case时的选项”

    }


    def main(args: Array[String]) {

        println(test_match(5))

        println(test_match(0))

        println(test_match(1))

    }

}


例一的输出结果:

More than one

It's empty

It has one



【例二】

object ScalaPatternTest2{

    //参数可以是任意类型(Any是Int,String,Boolean的超类,类似java中的Object)

    //具体的返回值由匹配的实参决定

    def test_match2(arg:Any) :Any = arg match {

        case 10 => "ten"

        case "three" => 3

        case arg: Boolean => arg//如果传入的参数是布尔值,则返回参数本身

        case arg: Int => "your input is: Scala.Int"  //判断输入的实参类型是不是整型

        case _ => "other input"

    }


    def main(args: Array[String]) {

        println(test_match2(true))

        println(test_match2(10))

        println(test_match2("three"))

        println(test_match2(100))

        println(test_match2("good afternoon"))

    }

}


例二的输出结果:

true

ten

3

your input is: Scala.Int

other input


———————


(2)使用样例类实现模式匹配

scala的样例类说明:

主要用于模式匹配.

内置了apply和unapply方法,还有串行化等接口.

创建对象时不需要使用new.


语法:case关键字+class+类名


【例】

object CaseClassTest {

    /*

    使用样例类实现模式匹配

     */

    def main(args: Array[String]) {

        val cindy = User("Cindy", 24, "Los Angeles")

        val karl = User("Karl", 27, "Sydney")

        val alice = User("Alice", 21, "Beijing")

        for (u <- List(cindy, alice,karl)) {

            u match {

                case User("Tony_kidkid", 27,"Beijing") => println("what's up?tony")

                case User("Alice", 21, "Beijing") => println("hi~ Alice")

                case User("Karl", 27, "Sydney") => println("hi~ Karl")

                case User("Cindy", 24, "Los Angeles") => println("hi~ Cindy")

            }

        }

    }

    case class User(name: String, age: Int, city: String)


}


输出结果:

hi~ Cindy

hi~ Alice

hi~ Karl



————————-


(3)使用偏函数实现模式匹配


object PartialFuncTest {

    def main(args: Array[String]) {

        /*定义变量,将会传给偏函数tony_kid

        * var表示是变量,可重新赋值;val表示常量,不可重新赋值

        */

        var var1 = 1

        var var0 = 0

        var var_x = “evening”

       //调用偏函数

        println(tony_kid(var1))

        println(tony_kid(var0))

        var0 = 10

        println(tony_kid(var0))


        //报错:传入的数据类型不是声明的Int

        //tony_kid(var_x)

    }


    //定义一个偏函数. 规定了传入的类型和返回类型分别是Int、String

    val tony_kid: PartialFunction[Int, String] = {

        case 0 => "zero"

        case 1 => "more than zero"

        case _ => "既不是 0 也不是 1"

    }

}


输出结果:

more than zero

zero

既不是 0 也不是 1

---------------

好了,就写到这里,看官们觉得涨知识了,请在文章左侧点个赞 ^_^

你可能感兴趣的:(scala,&,spark)