关闭

scala学习之模式匹配

2529人阅读 评论(0) 收藏 举报
分类:
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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:280358次
    • 积分:4333
    • 等级:
    • 排名:第7465名
    • 原创:127篇
    • 转载:124篇
    • 译文:0篇
    • 评论:28条
    最新评论