`

模式匹配case class

 
阅读更多

match表达式

// 正则匹配  
val pattern = "([0-9]+) ([a-z]+)".r;  
"741258933 hadoop" match {  
  case pattern(num,item) => println(num+":"+item)   
}   

  输出结果:741258933:hadoop

 

数组匹配

def match_array(arr:Any) =  arr match{  
  case Array(0) => println("Array:0" )  
  case Array(x,y) => println("Array:x="+x+",y="+y )  
  case Array(0,_*) => println("Array:..." )  
  case _ => println("something else" )  
}  
match_array(Array(0))  
match_array(Array(0,1))  
match_array(Array(0,1,2,3,4,5))  
match_array(Array("one","two","three"))   

  输出结果:

 

        Array:0

        Array:x=0,y=1

        Array:...

        somethingelse

case class匹配

   Scalacase class使得对对象进行模式匹配变得非常方便,简单的来说,Scalacase class就是在普通的类定义前加case这个关键字,然后你可以对这些类来模式匹配。

abstract class Person  
case class Student(age:Int) extends Person  
case class Worker(age:Int,salary:Double) extends Person  
case object Shared extends Person  
  
  
/** 
 * 1、声明case class 每个成员都会默认生成val,如age:Int 
 * 2、每个case class  都会有伴生对象,每个伴生对象都会有自己case class的具体对象 
 * 3、模式匹配的时候,可以从case class提取内容,提取方法从apply中。 
 */  
object case_class_object {  
    def main(args: Array[String]): Unit = {  
        
        def caseOps(person:Person) = person match{  
          case Student(age) => println("I am " + age + " years old");  
          case Worker(_,salary) => println("Wow,I got "+salary)  
          case Shared => println("no property...");  
        }  
          
        caseOps(Student(19))  
        caseOps(Worker(19,4000))  
        caseOps(Shared)  
          
        val worker = Worker(29,3000);  
        val worker2 = worker.copy(salary = 5000);  
        val worker3 = worker.copy(age = 31);  
    }  
}  

  输出结果:

 

        Iam 19 years old

        Wow,Igot 4000.0

        noproperty...

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Scala 专题教程 - Case Class和模式匹配-内含源码以及设计说明书(可以自己运行复现).zip

    Scala 专题教程 - Case Class和模式匹配-内含源码以及设计说明书(可以自己运行复现).zip

    4.样式类和模式匹配1

    1. 样例类 case class 和模式匹配 pattern matching 是一组孪生语法,它们为我们编写规则的、 1. 样例类是 Scala 用于对象模

    posmatch:自定义类的位置子模式匹配

    自定义类的位置子模式匹配。 要求 Python 3.8或更高版本。 注意:该程序包本身不需要Python 3.10,但是它的用法仅对Python 3.10中引入的新模式匹配功能有意义。 安装 pip install posmatch 用法 例子1 使用pos_...

    scala的匹配样例类

    scala可以使用模式匹配来匹配样例类,从而可以快速获取样例类中的成员数据。后续,我们在开发Akka案例时,还会用到。 示例 需求说明 创建两个样例类Customer、Order Customer包含姓名、年龄字段 Order包含id字段 ...

    match-errors:快速将错误与相应的错误处理程序匹配。 ifswitchelsecase不再混乱

    JavaScript中有一个模式匹配建议,但是即使使用模式匹配,您也可能会尝试以不适合JavaScript的方式来处理错误分配。 请看以下示例: class UserNotFoundError extends Error { }class PermissionDeniedError ...

    Swifter-Swift 开发者必备 Tips (第四版).zip

    于是我们可以发挥想象的地方就很多了,比如在 switch 中做 case 判断的时候,我们完全可以使用我们自定义的模式匹配方法来进行判断,有时候这会让代码变得非常简洁,具有条理。我们只需要按照需求重载 ~= 操作符就行...

    scala学习手册.zip

    Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许...Scala的Case Class及其内置的模式匹配相当于函数式编程语言中常用的代数类型(Algebraic Type)。

    scala-enum:基于密封类的 Scala 枚举的简单 40 行实现

    这是基于密封类(支持模式匹配耗尽检查)的枚举的简单 40 行实现。 它使用反射,因此如果您使用它,您可能需要将libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaV到您的项目中。 对象的枚举 ...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    * [abc] a, b, or c (simple class) [abc] a, b, 或 c (简单字符串) * [^abc] Any character except a, b, or c (negation) [^abc] 除了 a, b, 或 c 之外的任意字符(否定) * [a-zA-Z] a ...

    对称加密算法的PHP类.zip

     }常用对称加密算法类支持密钥:64/128/256 bit(字节长度8/16/32)支持算法:DES/AES(根据密钥长度自动匹配使用:DES:64bit AES:128/256bit)支持模式:CBC/ECB/OFB/CFB密文编码:base64字符串/十六进制字符串/二...

    Scala程序设计(第2版)

    4.13 总结关于模式匹配的评价 111 4.14 本章回顾与下一章提要 111 第5章 隐式详解 112 5.1 隐式参数 112 5.2 隐式参数适用的场景 115 5.2.1 执行上下文 115 5.2.2 功能控制 115 5.2.3 限定...

    快学 scala 中文版 带完整目录

    第14章 模式匹配和样例类 A2 221 14.1 更好的switch 222 14.2 守卫 223 14.3 模式中的变量 223 14.4 类型模式 224 14.5 匹配数组、列表和元组 225 14.6 提取器 227 14.7 变量声明中的模式 227 14.8 for...

    VBScript 语言参考中文手册CHM

    Select Case 语句 根据表达式的值,在若干组语句中选择一组执行。 Set 语句 将对象引用赋予变量或属性。 SetLocale 函数 设置全局区域设置,返回以前区域设置. Sgn 函数 返回表示数的符号的整数。 Sin 函数 返回...

    【。net 专业】 面试题

    15.asp.net如何实现MVC模式,举例说明! web/business/dataaccess 2.什么是ASP.net中的用户控件 答:用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成...

    VBSCRIPT中文手册

    Select Case 语句 根据表达式的值,在若干组语句中选择一组执行。 Set 语句 将对象引用赋予变量或属性。 Sgn 函数 返回表示数的符号的整数。 Sin 函数 返回角度的正弦值。 Source 属性 返回最早出错的对象或应用...

    vb Script参考文档

    Select Case 语句 根据表达式的值,在若干组语句中选择一组执行。 Set 语句 将对象引用赋予变量或属性。 Sgn 函数 返回表示数的符号的整数。 Sin 函数 返回角度的正弦值。 Source 属性 返回最早出错的对象或应用...

    VBScript 语言参考

    Select Case 语句 根据表达式的值,在若干组语句中选择一组执行。 Set 语句 将对象引用赋予变量或属性。 SetLocale 函数 设置全局区域设置,返回以前区域设置. Sgn 函数 返回表示数的符号的整数。 Sin 函数 返回...

    VBSCRIP5 -ASP用法详解

    Select Case 语句 根据表达式的值,在若干组语句中选择一组执行。 Set 语句 将对象引用赋予变量或属性。 SetLocale 函数 设置全局区域设置,返回以前区域设置. Sgn 函数 返回表示数的符号的整数。 Sin 函数 返回...

    java 面试题 总结

    21、Static Nested Class 和 Inner Class的不同。 Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。 22、JSP中动态...

    一个web爬虫的事例.txt

    // 用正则表达式编译链接的匹配模式。 Pattern p = Pattern.compile("*=\\s*\"?(.*?)[\"|>]", Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(pageContents); ArrayList<String> linkList = new ArrayList...

Global site tag (gtag.js) - Google Analytics