Scala匹配模式---Case 类匹配

让我们来尝试一次深度匹配,在我们的模式匹配中检查对象的内容。

//code-examples/Rounding/match-deep-script.scala

case class Person(name: String, age:Int)

val alice = new Person("Alice",25)

val bob = new Person("Bob",32)

val charlie = newPerson("Charlie", 32)

for (person <- List(alice, bob,charlie)) {

person match {

case Person("Alice", 25) => println("HiAlice!")

case Person("Bob", 32) => println("Hi Bob!")

case Person(name, age) => println("Who are you, " + age +" year-old person named " + name + "?")

}

}

从上面例子的输出中我们可以看出,可怜的Charlie 被无视了:

?

1

2

3       HiAlice!

Hi Bob!

Who are you, 32 year-old person namedCharlie?

我们收线定义了一个case 类,一个特殊类型的类,我们会在《第6章 - Scala 高级面向对象编程》的“Case 类”章节中学到更多细节。现在,我们只需要知道,一个case 类允许精炼的简单对象的构造,以及一些预定义的方法。然后,我们的模式匹配通过检查传入的Person case 类的值来查找Alice 和Bob。Charlie 则直到最后那个饥不择食的case 才被捕获;尽管他和Bob 有一样的年龄,但是我们同时也检查了名字属性。

我们后面会看到,这种类型的模式匹配和Actor 配合工作时会非常有用。Case 类经常会被作为消息发送到Actor,对一个对象的内容进行深度模式匹配是“分析”这些消息的方便方式。

更多精彩内容请关注:http://bbs.superwu.cn

关注超人学院微信二维码:

时间: 2024-08-29 05:50:41

Scala匹配模式---Case 类匹配的相关文章

Scala 匹配模式

模式匹配 // Scala是没有Java中的switch case语法的,相对应的,Scala提供了更加强大的match case语法,即模式匹配,类替代switch case,match case也被称为模式匹配 // Scala的match case与Java的switch case最大的不同点在于,Java的switch case仅能匹配变量的值,比1.2.3等:而Scala的match case可以匹配各种情况,比如变量的类型.集合的元素.有值或无值 // match case的语法如下

less匹配模式

less里面的匹配模式相当于js里面的if,但又不完全是,比如用css画一个三角 html <div class="sanjiao"></div> less .sanjiao{ width: 0px; height: 0px; overflow: hidden; border-width: 10px; border-color: red transparent transparent transparent; border-style: solid; } 这是一

scala学习手记40 - 使用case类

前面两节我们已经多次接触过case关键字了.case关键字不仅可以用在match/case中来执行模式匹配,也可以用来修饰类.不过用case修饰的类也主要是用来做模式匹配.在上一节曾经提到过match可以是Any类型的所有类,为什么还需要使用case关键字来修饰呢?假定有这样一个场景:我们要接收和处理股票交易信息,买卖消息通常会带有一些信息,诸如股票名称.数量.把这些信息存到对象里会很方便,但是如何对他们进行模式匹配呢?这时我们就会用到case类了.case类是模式匹配器(pattern mat

scala学习手记 - case表达式里的模式变量和常量

再来看一下之前的一段代码: def process(input: Any) { input match { case (a: Int, b: Int) => println("Processing (int, int)... ") case (a: Double, b: Double) => println("Processing (double, double)... ") case msg: Int if (msg > 1000000) =&g

正则匹配模式汇总(一)

正则表达式提供另一种强大的文本搜索和处理方式,对于正则表达式,不同语言有着不同的实现,JavaScript采用的Perl5的语法.对于极少数匹配模式是简单的全字符文本的情况,我们往往会采用indexOf这样的方法,但是多数情况下,匹配模式往往都更为复杂. 1.语法 1)在JavaScript中我们可以采用内建构造器RegExp()来创建正则表达式的对象:  var re = new RegExp("j.*t") 2)当然除了使用RegExp对象,我们可以采用更为简便的正则文本标记法 v

如何使用grep查询出不包含某匹配模式的文件

使用grep -c 可以统计每个文件匹配模式的数量,通过这种方法可以抽取出不匹配模式的那些文件,因为不包含匹配模式的文件将显示为file:0 vgrep() {    case $# in         0|1) echo "Usage: `basename $0` pattern file [files...]" 1>&2             ;;         *) pattern = $1             shift             grep

正则表达式的3种匹配模式

正则表达式是处理字符串的常用工具.在c#中,我们一般使用regex类来表示一个正则表达式.一般正则表达式引擎支持以下3种匹配模式:单行模式(singleline).多行模式(multiline)与忽略大小写(ignorecase). 1. 单行模式(singleline)msdn定义:更改点 (.) 的含义,使它与每一个字符匹配(而不是与除 \n 之外的每个字符匹配).使用单行模式的典型场景是获取网页源码中的信息.示例:我们使用webbrowser控件,从http://www.xxx.com/1

SQL模糊查询条件的四种匹配模式

执行数据库查询时,有完整查询和模糊查询之分. 一般模糊语句格式如下: SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件 其中关于条件,SQL提供了四种匹配模式: 1.% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 例如 SELECT * FROM [user] WHERE u_name LIKE '%三%'将会把u_name为"张三","张猫三"."三脚猫",&qu

正则表达式的全局匹配模式

首先,要明确一点,所有的正则表达式都有一个lastIndex属性,用于记录上一次匹配结束的位置.如果不是全局匹配模式,那lastIndex的值始终为0,在匹配过一次后,将会停止匹配. 正则表达式的全局匹配模式,就是在创建正则表达式的时候使用g标识符或者将global属性设置为true,在全局匹配模式下,正则表达式会对指定要查找的字符串执行多次匹配.每次匹配使用当前正则对象的lastIndex属性的值作为在目标字符串中开始查找的起始位置.如果找不到匹配的项lastIndex的值会被重新设置为0.