scala学习之模式匹配

scala中match与javaswitch的比较:匹配表达式可以被看作Java风格Switch的泛化。但有三点不同:
1、match是Scala的表达式,始终以值作为结果;
2、Scala的备选项表达式永远不会“掉到”下一个case;
3、如果没有模式匹配,MatchError异常会被抛出。这意味着必须始终确信所有的情况都考虑到了,或者至少添加一个默认情况什么都不做。如 case _ =>
模式的种类
通配模式:case _ => 。表示默认的全匹配备选项。通配模式还可以用来忽略对象中不关心的部分。如:case BinOp(_,_,_) => XXX,则表示不关心二元操作符的元素是什么,只是检查是否为二元操作符
常量模式 :仅匹配自身。任何字面量都可以用作常量。包括String类型。另外,任何的val或单例对象也可以被用作常量。如,单例对象Nil是只匹配空列表的模式。

变量模式 :变量模式类似于通配符,可以匹配任何对象。不同点在于,Scala把变量绑定在匹配的对象上。之后就可以使用这个变量操作对象。

abstract class Item
case class Book(description:String,price:Double) extends Item
case class Bundle(description:String,price:Double,items:Item*) extends Item
object Pattern_Match_Case_Class_Nested{
def caseclass_nested(person:Item)=person match{
case Bundle(_,_,art @ Book(_,_),rest @ _*)=> println(art.description+" : "+art.price)
case Bundle(_,_,Book(descr,_),_*)=>println("the first description is:"+descr)
case _=> println("Oops!")
}
caseclass_nested(Bundle("111 Special",30.0,
Book("Scala for the Spark Developer",69.95),
Budle("Hadoop",40.0),
Book("Hive",79.95),
Book("HBase",32.95)
))


caseclass_nested(Bundle("1212 Special",35.0,
Book("Spark for the Impatient",39.95)
))
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值