`

模式匹配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和模式匹配这两个关键概念,通过实例和源代码帮助你理解和掌握它们。下面是对每个知识点的详细说明。 **Case Class** 在Scala中,Case Class是一种特殊的类,它被设计用于模式...

    scala语言for循环中的模式匹配

    本文将详细介绍 Scala 语言 for 循环中的六种模式匹配方式:变量模式匹配、常量模式匹配、变量绑定模式匹配、类型模式匹配、构造函数模式匹配和序列模式匹配。 变量模式匹配 在 Scala 语言中,变量模式匹配是最...

    4.样式类和模式匹配1

    样例类(case class)主要用于创建具有明确定义的结构和行为的对象,而模式匹配(pattern matching)则提供了一种优雅的方式来分解和操作这些对象。 样例类(case class)是一种特殊的类,它的主要特点包括: 1. *...

    大数据课程-Scala编程基础-5.Scala模式匹配_lk_edit.ppt

    样例类(Case Class)提供了方便的模式匹配支持,而隐式函数则可以帮助简化类型转换和参数传递,这两者都极大地提升了代码的可读性和简洁性。 综上所述,Scala的模式匹配是其语言特性中的一大亮点,结合样例类、...

    spark-db-case-class:将Spark DB名称映射到case类中的字段

    在Scala中,case类是常用于表示结构化数据的工具,它提供了便利的模式匹配和自动导出方法。`spark-db-case-class`项目就是针对这种情况,它旨在帮助我们将Spark数据库表的列名映射到Scala的case类字段,从而简化数据...

    浅谈Scala模式匹配

    模式匹配的基本语法是 `e match { case Pattern1 => do Something case Pattern2 if-clause => do others ...}`,其中 `e` 是要匹配的值,`Pattern` 是要匹配的模式,`=>` 后面是要执行的代码。 模式匹配的主要特点...

    Python-switchcase用纯Python实现的SwitchCase结构

    然而,它也有一些限制,比如无法像C++或Java那样在`case`中使用范围或字符串模式匹配。在更复杂的场景下,可能需要结合`if-elif-else`语句或者使用元类(metaclass)和装饰器(decorator)来实现更复杂的逻辑。 在...

    first-class-patterns:一流的模式和模式匹配,使用类型族

    总之,“first-class-patterns”项目探讨了如何在Haskell中扩展模式匹配的概念,使其更加强大和灵活。通过将模式提升为第一类公民,并结合类型族,我们可以构建更加复杂和动态的模式匹配系统,这对于处理数据解析、...

    Scala和设计模式.pdf

    Scala作为一种兼具面向对象和函数式编程特性的现代语言,通过一系列高级语言特性(如模式匹配、类型推断等)使得许多设计模式的实现更加简洁高效。 #### 二、Scala中的设计模式 接下来,我们将具体介绍几种在Scala...

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

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

    scala的匹配样例类

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

    Scala样例类练习.docx

    在Scala中,样例类(Case Class)是一种特殊类型的类,主要用于模式匹配和不可变数据结构的构建。它们提供了许多便利的功能,如自动实现`equals`、`hashCode`、`toString`等方法,简化了开发者的编码工作量。 #### ...

    数据类:具有更好二进制兼容性的案例类

    - **模式匹配**:在模式匹配表达式中,Case Class可以被解构为它的各个字段,大大简化了数据处理。 在压缩包`data-class-master`中,可能包含示例代码、测试用例或其他资源,这些可以帮助你更深入地理解和应用Case ...

    Scala编程详解 第21讲-Scala编程详解:Actor入门 共8页.pptx

    `case class`还支持模式匹配,使得Actor可以轻松地处理不同类型的消息。例如,创建一个处理用户注册和登录的`UserManageActor`: ```scala case class Login(username: String, password: String) case class ...

    Spark从入门到精通Java版

    Scala的模式匹配特点是,支持基本语法、对类型进⾏模式匹配、对Array和List的元素进⾏模式匹配、case class与模式匹配等。 类型参数 类型参数是一种编程技术,用于在编译时确定类型。Scala的类型参数特点是,支持...

    1、scala面试题(25问).pdf

    Scala语言中的模式匹配包括了一系列的备选项,每个替代项以关键字大写为单位,每个替代方案包括一个模式或多个表达式,如果匹配将会进行计算,箭头符号=>将模式与表达式分离。 5. case class和class的区别 Case ...

    Scala考试题1

    13. **模式匹配与 Java switch-case 的不同**: - Scala 的模式匹配更强大,支持值匹配、类型匹配、提取器对象等,而 Java 的 switch-case 仅限于值比较。 14. **Scala 与 Java 的五点区别**: - Scala 支持函数...

    c++正则表达式用法及示例

    正则表达式是一种模式匹配工具,能够快速有效地查找、替换或分割字符串。在C++中,理解并熟练运用正则表达式可以极大地提高文本处理的效率和灵活性。 1. **基础概念** - **模式**:正则表达式就是一个模式,用于...

    C# 9 新特性的实际运用.docx

    模式匹配是C# 9中的一个重要增强,它允许我们在if语句、switch表达式或case子句中检查变量的类型或结构。这种特性可以更简洁地编写条件逻辑,提高代码可读性。例如,我们可以使用`is`关键字结合模式匹配来检查一个...

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

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

Global site tag (gtag.js) - Google Analytics