版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhoushuilin/article/details/81035250
什么叫模式匹配?大家知道Java中的Switch语句么?
我记得之前的课程里面,我讲了模式匹配比Java中的switch语句要厉害.
那我们首先来了解一下什么是模式匹配,然后再根据例子来看一下厉害在什么地方
一般情况下,根据给定条件去匹配一个东西,这种可以称之为模式匹配,这个概念不一定是教科书般的标准的,是我自己说的。
但是意思是这个意思. 你们能理解就行.
来怎么来看模式匹配呢?
for(i<- 1 to 10){
i match {
case i%2==0 => println("i的值为偶数:" +i)
case i%3==0 => println("i的值为3的倍数:" + i)
case _ => println("其他值")
}
}
//可以判断
for(i<- 1 to 10){
i match {
case 1 => println(1)
case 5 => println(5)
case 8 => println(8)
//增加守卫条件
case _ if(i%2==0)=> println(i+":能被2整除")
case _ if(i%3==0)=> println(i+":能被3整除")
case _ =>
}
var list=new ArrayBuffer[Int]()
var x=0
for(i<- 1 to 10){
i match {
//后面可以跟表达式
case 1 => x=1
case 5 => println(5)
case 8 => println(8)
case _ if(i%4==0)=> list.append(i)
case _ if(i%3==0)=> println(i+":能被3整除")
case _ =>
}
}
println(x)
那我们接下来讲一下case class
我们之前学了class, 其实case class也是class, 但是比class更加的简洁。
我们一般称之为样式类
/**
* Created by ZHOUSHUILIN140 on 2018/7/12.
*/
object SetTest {
def main(args: Array[String]): Unit = {
//可以不用new , 会自动的调用apply方法
val s1:Person = Student("张三",19 , "男")
s1 match {
case Student(name , age , sex) =>println("这是一个学生")
case Teacher(name , age , sex)=> println("这是一个老师")
case _ =>
}
s1.eat()
}
}
abstract class Person{
val name:String="李四"
def eat():Unit ={
println(name + "在吃饭")
}
def run()
}
case class Student(override val name:String,age:Int,Sex:String) extends Person{
override def run(): Unit = {
println("Run")
}
}
case class Teacher(override val name:String,age:Int,Sex:String) extends Person{
override def run(): Unit = {
println("Run")
}
}
那case class其实除了这种模式匹配的功能之外,其实本质上就是一个class,非常的便捷,以后我们会经常用到,
这个case class其实就可以当做一个普通的class来应用
我记得之前的课程里面,我讲了模式匹配比Java中的switch语句要厉害.
那我们首先来了解一下什么是模式匹配,然后再根据例子来看一下厉害在什么地方
一般情况下,根据给定条件去匹配一个东西,这种可以称之为模式匹配,这个概念不一定是教科书般的标准的,是我自己说的。
但是意思是这个意思. 你们能理解就行.
来怎么来看模式匹配呢?
for(i<- 1 to 10){
i match {
case i%2==0 => println("i的值为偶数:" +i)
case i%3==0 => println("i的值为3的倍数:" + i)
case _ => println("其他值")
}
}
//可以判断
for(i<- 1 to 10){
i match {
case 1 => println(1)
case 5 => println(5)
case 8 => println(8)
//增加守卫条件
case _ if(i%2==0)=> println(i+":能被2整除")
case _ if(i%3==0)=> println(i+":能被3整除")
case _ =>
}
var list=new ArrayBuffer[Int]()
var x=0
for(i<- 1 to 10){
i match {
//后面可以跟表达式
case 1 => x=1
case 5 => println(5)
case 8 => println(8)
case _ if(i%4==0)=> list.append(i)
case _ if(i%3==0)=> println(i+":能被3整除")
case _ =>
}
}
println(x)
那我们接下来讲一下case class
我们之前学了class, 其实case class也是class, 但是比class更加的简洁。
我们一般称之为样式类
/**
* Created by ZHOUSHUILIN140 on 2018/7/12.
*/
object SetTest {
def main(args: Array[String]): Unit = {
//可以不用new , 会自动的调用apply方法
val s1:Person = Student("张三",19 , "男")
s1 match {
case Student(name , age , sex) =>println("这是一个学生")
case Teacher(name , age , sex)=> println("这是一个老师")
case _ =>
}
s1.eat()
}
}
abstract class Person{
val name:String="李四"
def eat():Unit ={
println(name + "在吃饭")
}
def run()
}
case class Student(override val name:String,age:Int,Sex:String) extends Person{
override def run(): Unit = {
println("Run")
}
}
case class Teacher(override val name:String,age:Int,Sex:String) extends Person{
override def run(): Unit = {
println("Run")
}
}
那case class其实除了这种模式匹配的功能之外,其实本质上就是一个class,非常的便捷,以后我们会经常用到,
这个case class其实就可以当做一个普通的class来应用