scala高阶函数之匹配功能

1、其功能类似于Java switch,功能要强大于java, 可以对数据值和数据类型进行匹配

2、语法

变量 match{

  case 可能性1 => 操作1

  case可能性2 => 操作2

  ……

  case _ => 默认操作

}

示例代码

package day3

object demo_match {
    def main(args: Array[String]): Unit = {
        var sin = 2
        val ch = 'd'
        ch match {
            case '-' => sin -= 2
            case '+' => sin += 2
            case '/' => sin /= 2
            case _ => println("请输入正确的符号")
        }
        println(sin)
    }

}

别一种简洁的写法: 守卫

package day3
import scala.io.StdIn
object demo_match {

    def main(args: Array[String]): Unit = {
        var sin = 2
        val ch = StdIn.readChar()
        sin = ch match {  // case匹配结果直接赋值给变量的用法叫: 守卫
            case '-' => 1
            case '+' => 2
            case '/' => 3
            case _ => 0
        }
        println(sin)
    }

}

举个变量匹配和类型匹配的例子

package day3
import scala.io.StdIn
object demo_match {

    def main(args: Array[String]): Unit = {
//        matchVariable()
        matchType
    }
    // 变量匹配
    def matchVariable(): Unit ={
        "hello word".foreach(c => println(
            c match {
                case ' ' => " space"
                case _ => "char:" + c
            }
        ))
    }
// 类型匹配
    def matchType(): Unit ={
        class person(name:String, age:Int){}
        // 定义老师类
        class Teacher(name:String, age:Int) extends person(name, age){
            def teach(): Unit ={
                println(s"老师 ${name} ${age} 岁了!")
            }
        }
        // 定义学生类
        class Student(name:String, age:Int) extends person(name,age){
            def study(): Unit ={
                println(s"学生 ${name} ${age}岁了!")
            }
        }

        def dosth(p:person): Unit ={
            p match {
                case t:Teacher => t.teach()
                case s:Student => s.study()
                case _ => println("类型不匹配")
            }
        }

        dosth(new Teacher("lixi",23))
        dosth(new Student("kongming",18))

    }

}

数组匹配

package day3
import scala.io.StdIn
object demo_match {

    def main(args: Array[String]): Unit = {
        val list1 = Array(0,1,2)
        matArray(list1)
    }

    def matArray(arrs:Array[Int]): Unit ={
        arrs match {
            case Array(x, y) => println(s"x=${x}, y=${y}")  // 两元素的列表
            case Array(0, _*) => println(s"Array[0,*")   // 第一个元素为0,其它位置元素任意
            case _ => println("请传入正确的列表")
        }
    }
}
原文地址:https://www.cnblogs.com/kongzhagen/p/15178536.html