scala里的模式匹配和Case Class】的更多相关文章

模式匹配的简介 scala语言里的模式匹配可以看作是java语言中switch语句的改进. 模式匹配的类型 包括:常量模式.变量模式.构造器模式.序列模式.元组模式以及变量绑定模式等. 常量模式匹配 常量模式匹配,就是在模式匹配中匹配常量啦. objectConstantPattern{ def main(args:Array[String]) :Unit = { //模式匹配结果作为函数返回值 defpatternShow(x : Any) = x match { case 5 => "…
样本类:添加了case的类便是样本类.这种修饰符可以让Scala编译器自动为这个类添加一些语法上的便捷设定. //样本类case class //层级包括一个抽象基类Expr和四个子类,每个代表一种表达式 //样本类自动添加与类名一致的工厂方法 abstract class Expr case class Var(name:String) extends Expr//括号内参数不用加val,默认为加val的字段 case class Number(num:Double) extends Expr…
今天跟随王老师学习了从源码角度去分析scala中的模式匹配的功能.让我们看看源码中的这一段模式匹配: 从代码中我们可以看到,case RegisterWorker(id,workerHost,........){}这里为模式匹配,而我们的模式匹配类RegisterWorker之前就已定义好,如下图: 我们可以看到,我们的模式匹配类是已经定义好的,当我们的master接收到worker发来的消息时,进行模式匹配: . 这里还有一个知识点,我们可以发现,当我们进行模式匹配时,我们并没有使用new方法…
Scala 经典的模式匹配和尾递归 package io import java.io.{BufferedWriter, File, FileWriter} import java.text.SimpleDateFormat import scala.annotation.tailrec import scala.io.Source /** * author: HuaZhe Ray * * describe: 计算服务调用平均时长 * * createDate: 2017/12/15 * cre…
一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹配的基本格式如下: data match { case ... => 执行语句 case ... => 执行语句 case _  => 执行语句 } 其中,data表示将要进行模式匹配的对象,match是模式匹配的关键字,后面紧跟的{}中包含若干条匹配的方向,且只会匹配其中满足条件的第一条:…
模式匹配 package com.zy.scala import scala.util.Random /** * 模式匹配 */ object CaseDemo { def main(args: Array[String]): Unit = { //匹配字符串 val arr1 = Array(" hadoop", " zookeeper", " spark ") val name = arr1(Random.nextInt(arr1.lengt…
基本语法 变量 match { case 值1 => 代码 case 值2 => 代码 ... case 值N if (...) => 代码 case _ => 代码 } 常量匹配 scala> def matchConstant(x:Any) = x match { | case 1 => "One" | case "two" => "Two" | case "3" => &q…
在这篇martin和另外两位模式匹配领域专家的论文里说了模式匹配的几种实现方式,以及scala是选择哪种方式来实现的.http://lampwww.epfl.ch/~emir/written/MatchingObjectsWithPatterns-TR.pdf我引用了里面的一些描述. 在面向对象的程序中数据被组织为一级一级的类(class)面向对象语言在模式匹配方面的问题在于如何从外部探测这个层级. 有6种实现模式匹配的方法:1) 面向对象的分解 (decomposition)2) 访问器模式…
前面两节我们已经多次接触过case关键字了.case关键字不仅可以用在match/case中来执行模式匹配,也可以用来修饰类.不过用case修饰的类也主要是用来做模式匹配.在上一节曾经提到过match可以是Any类型的所有类,为什么还需要使用case关键字来修饰呢?假定有这样一个场景:我们要接收和处理股票交易信息,买卖消息通常会带有一些信息,诸如股票名称.数量.把这些信息存到对象里会很方便,但是如何对他们进行模式匹配呢?这时我们就会用到case类了.case类是模式匹配器(pattern mat…
case Expression of Pattern1 [when Guard1] -> Expr_seq1; Pattern2 [when Guard2] -> Expr_seq2; … end if Guard1 -> ...; Guard2 -> ...; ...; end. Erlang 编程指南 第三章程顺序编程里有这么一个例子 %%test1(X) -> %% if %% X > -> greater; %% X < -> smaller;…
我们要封装数据,定义模板等操作,所以我们需要面向对象. 一.scala中的单例对象 在scala当中,是没有static的,scala给我们提供了单例模式的实现方法.就是使用关键字object. static在java中修饰属性和方法,目的是直接类名.进行调用. 在scala中object是一个单例对象 在scala中object定义的成员变量和方法都是静态的 可以通过 类名. 来进行调用 1.ScalaTest object ScalaTest { //定义成员变量 val name: Str…
Scala中的match, 比起以往使用的switch-case有著更強大的功能, 1. 傳統方法 def toYesOrNo(choice: Int): String = choice match { case 1 => "yes" case 0 => "no" case _ => "error" } // toYesOrNo(1)=>"yes" // toYesOrNo(0)=>"n…
1.switch java代码 switch (cause) { case ‘2‘ : dropTime=time; case ‘8’:case ‘9’ : case ‘10’:case ‘11’ : p_X++; break; default: break; } scala var tag=...tag match { case ‘a’ => //todo case 'b'=> //todo2 case _ if(tag eq "c" or tag eq "d&…
7.    模式匹配和样例类 Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句.类型检查等.并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配. 7.1.   匹配字符串 package cn.itcast.cases import scala.util.Random object CaseDemo01 extends App{   val arr = Array("hadoop", "zookeeper", &quo…
文章目录 内容匹配 类型匹配 s表达式 case class 样例类 偏函数 内容匹配 import scala.util.Random object TestMatch { def main(args: Array[String]): Unit = { //创建一个Int数组 val array = Array(12, 34, 56, 78) //随机生成数组中的元素并赋值给常量i val i = array(Random.nextInt(array.length)) println(arra…
目录 一.基本语法 二.匹配固定值 三.守卫 四.匹配类型 五.匹配集合 1.Array 2.List 3.元祖 4.对象和样例类 六.偏函数 七.赋值匹配 八.for循环匹配 一.基本语法 在匹配某个范围的数据,需要在模式匹配中增加条件守卫. 语法 变量 match { case 匹配条件 => 处理逻辑 case 匹配条件 => 处理逻辑 case 匹配条件 => 处理逻辑 case _ => 其他处理 //case x => 其他条件 如果x不在箭头右边使用,则可以用_…
let age = 22 let sex = "girl" if (sex == "girl" && age >= 18 && age <= 25){ print("女朋友") } else { print("走你") } swift2中为我们增加了一种新的语法: if case if case 18...25 = age { print("免费") } else…
Scala-case-参考资料 scala case_百度搜索 Scala School - 基础知识(续) scala case匹配值 - CSDN博客 scala入门教程:scala中的match..case语句 - 为程序员服务 scala中的swtch case语句 - 为程序员服务 Scala中的case match语法 - CSDN博客 scala里的模式匹配和Case Class - 大数据躺过的坑 - 博客园…
https://blog.csdn.net/bluishglc/article/details/50995939 从使用case语句构造匿名函数谈起在Scala里,我们可以使用case语句来创建一个匿名函数(函数字面量),这有别于一般的匿名函数创建方法.来看个例子: scala> List(1,2,3) map {case i:Int=>i+1}res1: List[Int] = List(2, 3, 4) 这很有趣,case i:Int=>i+1构建的匿名函数等同于(i:Int)=&g…
为什么学习函数式编程 在阅读DDD巨著<Patterns, Principles, and Practices of Domain-Driven Design>的过程中,Scott在第5章提到了使用函数式编程语言配合贫血模型去实践DDD的一种思路,这激发了我的无限遐想. 在软件开发领域,我们已经拥有了许多的抽象方法论和大量的实现技术.但我个人认为,这一切归根结底,都是人类思维在软件开发领域的具体表达方式.而人类在认识和分析软件所要解决的业务领域问题时,思考的内容不外乎由两个部分组成:『业务流程…
Scala进阶之路-面向对象编程之类的成员详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Scala中的object对象及apply方法 1>.scala 单例对象 在Scala中,是没有static这个东西的,但是它也为我们提供了单例模式的实现方法,那就是使用关键字object.注意:object 对象是不能带参数的. /* @author :yinzhengjie Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%…
JVM语言 JVM上的语言越来越多了,从前几年的groovy.Scala和Clojure,现在又听说一门Kotlin.对于前三种语言,groovy算是JVM平台上的动态脚本语言,可以类比Python:Scala以其直逼C++的语言复杂度而出名,但是该语言的流行是因为高并发(akka)和大数据处理(Spark):Clojure是JVM上的Lisp重现,是纯粹的函数式编程语言,它在实时计算(Strom)中承担了一部分责任. 选择Scala 我决定了解Scala的原因是高并发,以及它与Java具备良好…
引言 Lagom是出品Akka的Lightbend公司推出的一个微服务框架,目前最新版本为1.6.2.Lagom一词出自瑞典语,意为"适量". https://www.lagomframework.com/documentation/1.6.x/scala/Home.html Lagom框架坚持,微服务是按服务边界Boundary将系统切分为若干个组成部分的结果,这意味着要使它们与限界上下文Bounded Context.业务功能和模块隔离等要求保持一致,才能达到可伸缩性和弹性要求,从…
样本类:添加了case的类便是样本类.这种修饰符可以让Scala编译器自动为这个类添加一些语法上的便捷设定.如下: 1.添加与类名一致的工厂方法.也就是说,可以写成Var("x")来构造Var对象.    2.样本类参数列表中的所有参数隐式获得了val前缀,因此它被当作字段维护. 3.编译器为这个类添加了方法toString,hashCode和equals等方法. 模式匹配: match对应Java里的switch,但是写在选择器表达式之后.即: 选择器 match {备选项}. 一个…
Scala中的模式匹配的功能可以应用到switch语句.类型检查.“解构”等多种场合. 简单匹配 Scala的模式匹配最常用于match语句中.Scala的match语句类似Java里的switch. 匹配实例: def color(num: Int): String = { val colorNum = num val colorStr = colorNum match { case 1 => "red" case 2 => "green" case…
什么是模式? 一些刚从java转到scala的同学在开发的过程中犹如深陷沼泽,因为很多的概念或风格不确定,scala里有很多的坑,模式匹配也算一个.我整理了一下自己所理解的概念,以及一些例子.这个系列最好有些scala的基本经验,或者接触过一些其他函数式语言. 要理解模式匹配(pattern-matching),先把这两个单词拆开,先理解什么是模式(pattern),这里所的模式并不是设计模式里的模式.而是数据结构上的,这个模式用于描述一个结构的组成. 我们很容易联想到“正则表达”里的模式,不错…
前言 首先.我们要在一開始强调一件非常重要的事:Scala的模式匹配发生在但绝不仅限于发生在match case语句块中.这是Scala模式匹配之所以重要且实用的一个关键因素!我们会在文章的后半部分具体地讨论这一点. 本文原文出处: http://blog.csdn.net/bluishglc/article/details/51056230 严禁不论什么形式的转载.否则将托付CSDN官方维护权益. 模式匹配的种类 在Scala中一共同拥有例如以下几种类型的模式匹配: 通配符匹配(Wildcar…
用过Scala的模式匹配,感觉Java的弱爆了.Scala几乎可以匹配任何数据类型,如果默认的不能满足你的要求,你可以自定义模式匹配. 介绍Scala的模式匹配前,我们先了解清楚unapply()与unapplySeq()两个方法: 名字叫做unapply和unapplySeq的方法在Scala里也是有特殊含义的. 我们前面说过case class在做pattern match时非常好用,而除case class之外,有unapply或unapplySeq方法的对象在pattern match时…
1.模式匹配比java中的switch case强大很多,除了值,类型,集合等进行匹配,最常见的Case class进行匹配,Master.scala有大量的模式匹配. Case "_"表示不满足上面的所有情况的体验,举个例子: def bigdata(data: String){ data match{ case "Spack"=>println("WOW!!!") case "Hadoop"=>println(…
1. 模式匹配 Scala中的模式匹配类似于Java中的switch语法,但是更加强大.模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断.如果所有case都不匹配,那么会执行case _ 分支,类似于Java中default语句. match的细节和注意事项: 1)如果所有case都不匹配,那么执行case _ 分支,类似于Java中defaul…