scala学习之模式匹配

原创 2016年06月01日 23:20:05
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 自学笔记 模式匹配和样例类

switch var sign = ... val ch: Char = ... ch match{ // 无需像java一样 加break case '+' => sign =1 cas...
  • escaflone
  • escaflone
  • 2015年03月12日 15:30
  • 3089

scala 模式匹配之Type、Array、List和Tuple

Scala 模式匹配之Type、Array、List和Tuple介绍。
  • yyywyr
  • yyywyr
  • 2015年12月14日 20:20
  • 1287

Scala School 笔记(三)--模式匹配与函数组合

函数组合 让我们创建两个函数: scala> def f(s: String) = "f(" + s + ")" f: (String)java.lang.String scala> def g(...
  • li385805776
  • li385805776
  • 2014年02月14日 15:01
  • 4946

scala学习十四 模式匹配

模式匹配详解: package matchtest; class matchtest { var d:Int=0; def mat(a: Int) { a match { ...
  • hao707822882
  • hao707822882
  • 2014年08月04日 17:41
  • 835

学习scala的点点滴滴-模式匹配

scala中的模式主要有以下几种:abstract class Fruitcase class Apple(name: String) extends Fruitcase class AppleAnd...
  • i402097836
  • i402097836
  • 2016年04月13日 18:16
  • 172

scala学习之模式匹配

scala中有一个灰常强大的东西,叫做模式匹配。可以理解为Switch,只是比它更加强大。 var sign = -1 val ch:Char = '+' /** * 模式匹配:更好用...
  • GG584741
  • GG584741
  • 2015年08月17日 16:54
  • 314

Scala学习笔记--模式匹配

Pattern matching(模式匹配) 1> 定义一个data常量,对它进行匹配,最后一行是_如果前面都不满足则匹配到他 2>在模式匹配中可以加入判断语句,进行选择 3>可以对...
  • snail_gesture
  • snail_gesture
  • 2015年08月30日 00:14
  • 417

scala学习笔记07--样本类(case class)和模式匹配

样本类:添加了case的类便是样本类。这种修饰符可以让Scala编译器自动为这个类添加一些语法上的便捷设定。如下:     1.添加与类名一致的工厂方法。也就是说,可以写成Var("x")来构造...
  • codemosi
  • codemosi
  • 2015年03月27日 17:03
  • 601

Scala学习日志(二)——深入模式匹配(一)

码字不易,转发请注明出处:http://blog.csdn.net/qq_28945021/article/details/51980338摘要Scala模式匹配咋一看和Java中的Switch语句很...
  • qq_28945021
  • qq_28945021
  • 2016年07月21日 17:02
  • 1529

Scala学习——模式匹配和样例类

 Scala强大的模式匹配机制,可以应用在switch语句、类型检查以及“析构”等场合。样例类对模式匹配进行了优化。 更好的switch ...
  • hujun8610
  • hujun8610
  • 2014年07月18日 11:08
  • 799
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:scala学习之模式匹配
举报原因:
原因补充:

(最多只允许输入30个字)