12. Scala模式匹配】的更多相关文章

12.1 match 12.1.1 基本介绍 Scala中的模式匹配类似于Java中的switch语法,但是更加强大 模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断.如果所有的case都不匹配,那么会执行case_分支,类似于Java中的default语句 12.1.2 scala的match的快速入门案例 object boke_demo01…
Scala模式匹配 Tip1:模式总是从上往下匹配,如果匹配不到则匹配case_项(类似Java中的default) Tip2:与Java和C语言不同,不需要在每个分支末尾使用break语句退出(不会掉入下一分支) 1 值匹配 与Java中的值匹配类似 2 守卫 3 类型匹配 结果:…
一.scala模式匹配(pattern matching) pattern matching可以说是scala中十分强大的一个语言特性,当然这不是scala独有的,但这不妨碍它成为scala的语言的一大利器. scala的pattern matching是类似这样的, e match { case Pattern1 => do Something case Pattern2 if-clause => do others ... } 其中,变量e后面接一个match以及一个代码块,其中每个cas…
Scala模式匹配 模式匹配是Scala函数值和闭包后第二大应用功能.Scala为模式匹配提供了极大的支持,处理消息. 模式匹配包括一系列备选项,每个替代项以关键字大小写为单位.每个替代方案包括一个模式和一个或多个表达式,如果模式匹配,将会进行评估计算.箭头符号=>将模式与表达式分离. 尝试以下示例程序,它显示匹配的整数值. 示例 object Demo { def main(args: Array[String]) { println(matchTest(3)) } def matchTest…
用过Scala的模式匹配,感觉Java的弱爆了.Scala几乎可以匹配任何数据类型,如果默认的不能满足你的要求,你可以自定义模式匹配. 介绍Scala的模式匹配前,我们先了解清楚unapply()与unapplySeq()两个方法: 名字叫做unapply和unapplySeq的方法在Scala里也是有特殊含义的. 我们前面说过case class在做pattern match时非常好用,而除case class之外,有unapply或unapplySeq方法的对象在pattern match时…
package com.ming.test /** * 模式匹配 */ object MatchTest { def main(args: Array[String]): Unit = { //match 基本用法 var sign=3 var m='w' var str='d' var digit="dsafdsafdsaf" m match{ case '+' => sign=10 case '-' => sign=100 case _ => sign=200 }…
1.模式匹配比java中的switch case强大很多,除了值,类型,集合等进行匹配,最常见的Case class进行匹配,Master.scala有大量的模式匹配. Case "_"表示不满足上面的所有情况的体验,举个例子: def bigdata(data: String){ data match{ case "Spack"=>println("WOW!!!") case "Hadoop"=>println(…
样本类:添加了case的类便是样本类.这种修饰符可以让Scala编译器自动为这个类添加一些语法上的便捷设定.如下: 1.添加与类名一致的工厂方法.也就是说,可以写成Var("x")来构造Var对象.    2.样本类参数列表中的所有参数隐式获得了val前缀,因此它被当作字段维护. 3.编译器为这个类添加了方法toString,hashCode和equals等方法. 模式匹配: match对应Java里的switch,但是写在选择器表达式之后.即: 选择器 match {备选项}. 一个…
1. 模式匹配 Scala中的模式匹配类似于Java中的switch语法,但是更加强大.模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断.如果所有case都不匹配,那么会执行case _ 分支,类似于Java中default语句. match的细节和注意事项: 1)如果所有case都不匹配,那么执行case _ 分支,类似于Java中defaul…
http://www.artima.com/scalazine/articles/pattern_matching.html这篇文章是odersky谈scala中的模式匹配的一段对话,我做了部分片段翻译(不是连贯的): 模式可以嵌套,就像表达式嵌套,你可以定义深层的模式,通常一个模式看起来就像一个表达式.它基本上就是同一类事情.它看起来像一个复杂的对象树构造表达式,只是漏掉了new关键字.事实上在scala当你构造一个对象,你不需要new关键字然后你可以在一些地方用变量做站位符替代对象树上实际的…
在这篇martin和另外两位模式匹配领域专家的论文里说了模式匹配的几种实现方式,以及scala是选择哪种方式来实现的.http://lampwww.epfl.ch/~emir/written/MatchingObjectsWithPatterns-TR.pdf我引用了里面的一些描述. 在面向对象的程序中数据被组织为一级一级的类(class)面向对象语言在模式匹配方面的问题在于如何从外部探测这个层级. 有6种实现模式匹配的方法:1) 面向对象的分解 (decomposition)2) 访问器模式…
什么是模式? 一些刚从java转到scala的同学在开发的过程中犹如深陷沼泽,因为很多的概念或风格不确定,scala里有很多的坑,模式匹配也算一个.我整理了一下自己所理解的概念,以及一些例子.这个系列最好有些scala的基本经验,或者接触过一些其他函数式语言. 要理解模式匹配(pattern-matching),先把这两个单词拆开,先理解什么是模式(pattern),这里所的模式并不是设计模式里的模式.而是数据结构上的,这个模式用于描述一个结构的组成. 我们很容易联想到“正则表达”里的模式,不错…
今天在工作中遇到的几个小问题,总结一下: 1.因为业务需要调用PHP的接口,获取到的返回体需要做一段逻辑处理,然而某个字段接收到的参数是io.serializable类型,字段的类型不是预期的string类型,当时有点懵逼,因为是用Scala的match case做模式匹配,也没多想,幸亏同事提示一番,才想起String其实实现了serializable接口,所以尽管返回的是io.serializable类型,但是也可以用string来接收: 2.调用PHP接口,返回体用JsonObject接受…
Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句.类型检查等.并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配. 1.字符匹配     def main(args: Array[String]): Unit = {       val charStr = '6'       charStr match {         case '+' => println("匹配上了加号")         case '-' => pr…
一.模式匹配1 1.介绍 模式匹配是Scala中非常有特色,非常强大的一种功能.模式匹配,其实类似于Java中的swich case语法,即对一个值进行条件判断,然后针对不同的条件, 进行不同的处理. 但是Scala的模式匹配的功能比Java的swich case语法的功能要强大地多,Java的swich case语法只能对值进行匹配.但是Scala的模式匹配除了可以对值进行匹配之外, 还可以对类型进行匹配.对Array和List的元素情况进行匹配.对case class进行匹配.甚至对有值或没…
1.模式匹配的基础语法 2.对类型进行模式匹配 3.对Array和List的元素进行模式匹配 4.case class与模式匹配 5.Option与模式匹配 1.模式匹配的基础语法 Scala提供了match case语法,即模式匹配.替代java的switch case. 两者不同,java中switch case仅能匹配变量的值,比如1.2.3等:scala中的match case可以匹配各种类型,比如变量的类型.集合的元素.有值或无值. Match case语法:变量 match{ cas…
1 变量声明中的模式 match中每一个case都可以单独提取出来,意思是一样的. 应用案例 val (x, y) = (1, 2) val (q, r) = BigInt(10) /% 3 //说明 q = BigInt(10) / 3 r = BigInt(10) % 3 val arr = Array(1, 7, 2, 9) val Array(first, second, _*) = arr // 提出arr的前两个元素 println(first, second) 2 for表达式中的…
1 match 应用案例 Scala的模式匹配 案例代码完整: package com.atguigu.base object MatchDemo { def main(args: Array[String]): Unit = { // 模式匹配,类似于Java的switch语法 var result = 0 val c = '-' c match { case '-' => result = 1 println("匹配到-") case '+' => result = -…
1.建立的JVM之上 2.强大的集合工具类,增强模式匹配 3.函数式编程模型(链式编程模式) 4.线程池与消息机制的增强 5.面向对象,运行在jvm之上…
样本类 1.带有case关键字的类被称为样本类: 例如:abstract class Expr case class Var(name: String) extends Expr case class Number(num: Double) extends Expr case class UnOp(operator:String,arg: Expr) extends Expr case class BinOp(operatot: String,left:Expr,right:Expr) exte…
一  Scala简述 统计世界top100大学计算机系年级前三名,从初中开始编程,学过20多种语言,最后认为Scala最难.好了,我们开始享受这个过程把:). 二  Scala安装与配置 Scala需要Java运行时库,安装Scala需要首先安装JVM虚拟机,推荐安装JDK1.8. 在http://www.scala-lang.org/ 下载Scala2.11.8程序安装包. 根据不同的操作系统选择不同的安装包,下载完成后,将安装包解压到安装目录.将scala安装目录下的bin目录加入到PATH…
package com.dt.spark.scala.bascis class Dataframework case class Computerframework (name:String,popular:Boolean) extends Dataframework case class Storgeframework (name:String,popular:Boolean) extends Dataframework object helloPatternMatch { def main(…
1 匹配数组 1)Array(0) 匹配只有一个元素且为0的数组. 2)Array(x,y) 匹配数组有两个元素,并将两个元素赋值为x和y.当然可以依次类推Array(x,y,z) 匹配数组有3个元素的等等.... 3)Array(0,_*) 匹配数组以0开始 应用案例 2 匹配列表 应用案例 for (list <- Array(List(0), List(1, 0), List(0, 0, 0), List(1, 0, 0))) { val result = list match { cas…
class caseTest { def main(args: Array[String]): Unit = { val c = Person(Student(1),"a") c match { //匹配Person对象,但除了使用Person对象的两个构造参数stu, name外 //有时候还需要用到匹配Person对象实例, 使用 a@A a为对象名,A为对象类型 case person @ Person(stu, name) => { val student: Studen…
前言 首先.我们要在一開始强调一件非常重要的事:Scala的模式匹配发生在但绝不仅限于发生在match case语句块中.这是Scala模式匹配之所以重要且实用的一个关键因素!我们会在文章的后半部分具体地讨论这一点. 本文原文出处: http://blog.csdn.net/bluishglc/article/details/51056230 严禁不论什么形式的转载.否则将托付CSDN官方维护权益. 模式匹配的种类 在Scala中一共同拥有例如以下几种类型的模式匹配: 通配符匹配(Wildcar…
一. scala 模式匹配(pattern matching) pattern matching 可以说是 scala 中十分强大的一个语言特性,当然这不是 scala 独有的,但这不妨碍它成为 scala 的语言的一大利器. scala 的 pattern matching 是类似这样的, e match { case Pattern1 => do Something case Pattern2 if-clause => do others ... } 其中,变量 e 后面接一个 match…
scala模式匹配 1.基础match case(类似java里switch case,但功能强大些) object MatchApp { def main(args: Array[String]): Unit = { val is = Array("a","b","c","d") val i = is(Random.nextInt(is.length))//随机取数组中的一个值 i match { case "a&…
Scala 是什么?(What is scala?)   引用百度百科对于scala的定义: Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性.   scala 是一种纯面向对象的编程语言,但是与java不同,其还无缝结合了命令式编程以及函数式编程.scala的出现,抹平了这些编程范式之间严格的界限.与java相比,scala更为简洁,实现一个相同的功能,也许scala的代码行数只需要java的五分之一甚至十分之一…
整体介绍 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. 联邦理工学院洛桑(EPFL)的Martin Odersky于2001年基于Funnel的工作开始设计Scala.Java平台的Scala于2003年底/2004年初发布..NET平台的Scala发布于2004年6月.该语言第二个版本,v2.0,发布于2006年3月. Scala 运行在Java虚拟机上,并兼容现有的Java程序. Scala 源代码被编译成Java字…
1.  x.purchaseIntax.getOrElse(BigDecimal(0.00)) 可以直接写成 x.purchaseIntax.getOrElse(0)自动转换的 2. srcDataList.foldLeft(0.0)((s, v) => s+v.firstCostTax.toDouble)) 优化成 srcDataList.map(_.firstCost).sum 3. 23/BigDecimal(23) 可会造成精度丢失,都转为BigDecimal进行乘除运算 4. 使用sc…