scala简要:模式匹配

与switch不同,scala模式匹配没有break的问题。如果case中的判断不能匹配,则捕获所有的模式来尝试匹配。变量模式可能与常量表达式冲突,变量必须以小写字母开头。如果有一个小写字母开头的常量,则需要把它抱在反引号中。

在类型匹配的时候,必须给出一个变量名,否则会拿对象本身来进行匹配。由于匹配发生在运行时,Jvm中泛型的类型信息是被擦掉的,所有不能用类型来匹配特定的Map类型。

正则表达式是适合使用提取器的场景,

样例类是一种特殊的类,经过优化以被用于模式匹配,其实例使用(),样例对象不使用圆括号。中置表示法可用于任何返回对偶的unapply方法。样例类的特点:
1)模式匹配的代码更精简
2)构造时不需new
3)可以免费得到toString,equals,hashCode 和copy方法

让所有样例类都扩展某个密封的类或特质是个好做法。被包在花括号内的一组case语句是一个偏函数,偏函数表达式必须位于编译器可以推断返回类型的上下文中。

时间: 2025-01-18 01:39:14

scala简要:模式匹配的相关文章

Scala之模式匹配(Patterns Matching)

前言 首先,我们要在一开始强调一件很重要的事:Scala的模式匹配发生在但绝不仅限于发生在match case语句块中,这是Scala模式匹配之所以重要且有用的一个关键因素!我们会在文章的后半部分详细地讨论这一点. 模式匹配的种类 在Scala中一共有如下几种类型的模式匹配: 通配符匹配(Wildcard Pattern Matching ) 常量匹配 (Constant Pattern Matching ) 变量匹配(Variable Pattern Matching ) 构造函数匹配(Con

Scala的模式匹配本质是什么? -从Coursera的响应式编程说起

推荐Coursera上的响应式编程课程,这个课程是scala语言的进阶课程. 课程的开始提出了这样一个应用场景:构建Json串,不知道Json的同学随便google一下. 为了做到这些事情,我们定义了下面的一些类 abstract class JSON case class JSeq(elems: List[JSON]) extends JSON case class JObj(bindings: Map[String, JSON]) extends JSON case class JNum(n

scala 简要: Actor

actor提供了并发程序中与传统的基于锁的结构不同的另一种选择,通过尽可能避免锁和共享状态,actor更容易地设计出正确.没有死锁或争用状况的程序.Scala提供了actor的简单实现,akka(http://akka.io)提供了高级actor类库. 每个actor都要扩展Actor类并重写Act方法,actor是处理异步消息的对象,消息可以是任何对象,通过!操作符发送消息,例如:actorX !"happy new year"一个好的方式是使用样例类作为消息,这样,actor可以使

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

原文链接 http://nerd-is.in/2013-09/scala-learning-pattern-matching-and-case-classes/ 原文发表于:http://nerd-is.in/2013-09/scala-learning-pattern-matching-and-case-classes/ Scala强大的模式匹配机制,可以应用在switch语句.类型检查以及“析构”等场合. 样例类对模式匹配进行了优化. 更好的switch 1 2 3 4 5 6 7 8 va

scala 简要: xml处理

Scala提供了对xml的内建支持,可以用scala.xml.Elem的值表示一个XML元素.Node类是所有xml节点类型的父类,Elem类描述xml元素.要处理某个元素的属性键和值,可以用attributes属性,然后用()来访问定键的值 ,使用循环或asAttrMap方法遍历所有属性. 内嵌的字符串会被转成Atom[String]节点,所以可在xml中包含scala代码,被内嵌的scala代码还可以继续包含XML片段,被引用的字符串当中的花括号不会被解析和求值. NodeSeq提供了类似x

scala简要:操作符和解析器

变量.函数.类等的名称统称为标识符,反引号中可以包含几乎任何字符序列.在scala中,除了-以冒号:结尾的操作符-赋值操作符所有操作符都是左结合的. unapply方法接受一个对象,然后从中取值,通常是当初用来构造该对象的值.要取任意长度的值的序列,一般用unapplySeq命名方法. Scala解析器库是scala语言总内嵌领域特定语言(DSL)的高级示例.为了使用Scala解析库,需提供一个扩展自Parsers特质的类并定义那些由基本操作组合起来的解析操作,包括:1)匹配一个词法单元2)在两

Scala的模式匹配和条件类

树是在程序中常用的一个数据结构.例如编译器和解析器常常吧程序表示为树:XML文档结构也是树状的:还有一些集合是基于树的,例如红黑树.接下来我们将通过一个计算器程序来研究树在Scala中是如何表示和操纵的.这个程序的目标是处理一些由整数常量.变量和加号组成的简单的算数表达式,例如1 + 2 和 (x + x ) + (7 + y ).我们首先要决定如何表示这些表达式.最自然的方法就是树了,树的节点表示操作符(在这里只有加法),而树的叶节点表示值(这里表示常数和变量). 在Java中,这样的树可以表

【Scala】模式匹配和样本类

模式匹配 要理解模式匹配(pattern-matching),先把这两个单词拆开,先理解什么是模式(pattern),这里所的模式是数据结构上的,这个模式用于描述一个结构的组成. 我们很容易联想到"正则表达"里的模式,不错,这个pattern和正则里的pattern相似,不过适用范围更广,可以针对各种类型的数据结构,不像正则表达只是针对字符串.比如正则表达式里 "^A.*" 这个pattern 表示以A开头.后续一个或多个字符组成的字符串:List("A&

scala 简要之数组与映射

数组 Scala中的Array是定长数组,ArrayBuffer是变长数组,对应于Java中的ArrayList,C++中的Vector,可以用相同的代码处理这两种数据结构,用for (i<-区间 )来遍历,用 for(...) yield 创建一个类型与原始集合相同的新集合,还可以通过if 在进行条件过滤.Scala中的内建函数sum,sorted,max,min,quicksork提供了常用算法. 由于Scala数组是用java数组实现的,可以在java和scala之间传递,只需引入scal