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)
))
}

阅读更多
个人分类: scala
上一篇scala学习之高阶函数
下一篇MySQL 数据库性能优化之缓存参数优化
想对作者说点什么? 我来说一句

Scala 书籍推荐 学习路线

2017年10月19日 29.2MB 下载

Scala中文教程 + 中文参考手册

2011年07月03日 2.65MB 下载

scala学习笔记整理

2018年05月09日 1.92MB 下载

scala程序设计第三版(最新版)

2018年01月30日 4.12MB 下载

scala程序设计第三版

2018年05月23日 3.52MB 下载

Effective Scala

2017年11月14日 8.91MB 下载

scala学习源代码

2013年04月18日 2.63MB 下载

beginners-guide-to-scala

2018年01月23日 886KB 下载

scala PPt

2010年03月19日 881KB 下载

没有更多推荐了,返回首页

关闭
关闭