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("请传入正确的列表") } } }