19类型判断模式匹配

本文深入解析Scala中的类型判断、类型操作及模式匹配应用,包括类型判断、强制转换、获取Class对象的方法,以及标准形式和偏函数的模式匹配技巧。通过实例展示了数据值、类型、开头匹配和元组匹配的多种方式,并介绍了样例类的使用。

1.类型判断

Scala中一切的父类是Any。
AnyRef是Any的子类,它是引用类型的父类。
AnyVal是Any的子类,它是所有值类型的父类。
AnyVal的子类有9个(基本数据类型):Byte,Short,Int,Long,Double,Float,Char,boolean,Unit

2.对类型的基本操作

1-判断当前对象是否是当前类型
	Java中: obj instanceof 类
	scala中: obj isInstanceOf[类]
2-将对象类型强制转换
	Java中: (类型)obj
	scala中: obj.asInstanceOf[类]
3-获取类型的Class对象
	Java中: 类.class
	scala中: classOf[类]

3.模式匹配(两种形式)

1-标准形式
	数据 match {
		case 条件 => 输出
	}
2-偏函数(先以show代替)
	def show () = {
		case 条件 => 输出
	}
3-异同
	Java中的switch-case只能匹配字符,枚举,int数值,字符串。
	Scala中的match-case基本什么都可以匹配。
	
	Java中的switch-case需要使用break,不然就会贯穿(从开始执行到结束不会关心case条件是否满足)。
	scala中的match-case没有break,只要case满足就执行,执行完就自动退出,不会执行下一个case。
	scala中使用_ 代替Java中的default,是最后的默认情况,一定要放到最后。

4.多种匹配方式

//匹配数据值	
val arr = Array("aa", "bb", "cc", "dd")
arr(Random.nextInt(arr.length)) match {
	case "aa" => println("one")
	case "bb" => println("two")
	case "cc" => {println("three")}
	case "dd" => println("four")
	case _ => println("默认")
}

//匹配数据类型
val arr2:Array[Any] = Array("string",1,3.8,7L,MatchCaseDemo)
arr2(Random.nextInt(arr2.length)) match {
	case x:Int => println("int类型数值")
	case y:Double if (y>0) => println("大于零的浮点数值")
	case MatchCaseDemo => {println("中奖啦")}
	case _ => println("结束啦")
}

//匹配以什么开头
val arr3 = Array(1,1,5,7,3)
arr3 match {
	case Array(1,2,x,y) => println("有四个元素且前两一样时"+x+y)
	case Array(1,1,5,_*) => println("_*代表后边所有值")
	case _ => println("没有")
}

//元组匹配
val tup = (1,3,5)
tup match {
	case (3,x,y) => println("匹配成功")
	case (x,y,z) => println("只要三个元素就成功")
	case (_,y,5) => println("尽量不要使用下划线")
}

5.样例类

主要是为了提供给模式匹配类,可以什么都不写,只是封装,也可以写入一些数据
	分装数据使用:case class 类名(构造方法) 
	可以匹配方法:case object 类名
定义样例类,在类的外部,可以在其他文件中,需要使用 case + class或object

//定义样例类
case object Check
case class Submit(id:String,time:Long)
case class Cat(name:String,king:String){进行数据操作}

//使用样例类
val arr = Array(Check,Submit("001",1500))
arr(Random.nextInt(arr.length)) match {
	case check => println("没有参数")
	case Submit(id,task) => println("可以使用{}操作数据")
	case _ => println()
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hao难懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值