package spark.examples.scala.grammars.caseclasses object CaseClass_Test00 { def simpleMatch(arg: Any) = arg match { case v: Int => "This is an Int" case v: (Int, String) => ("This is a (Int, String): " + v._1 + "," + v._2) case _ => ("Unknown type, print as is: " + _) //模糊匹配,匹配所有的情况,类似* } def caseClassMatch(arg: Any) = arg match { case Dog(_) => arg case Cat(_) => arg case Horse(n, a, w) => w } def constantMatch(arg: Any) = arg match { case 3 => "This is an Int 3" case "3" => "This is a string 3" case true => "This is boolean true" case Nil => "This is a Nil" case null => "This is null" } def partialMatch(arg: List[_]) = arg match { case List(0, _, _) => "This is a list of length 3, and also starts with 0" case List(0, _*) => "This is a list of length not 3, and starts with 0: " + arg.size } def tupleMatch(arg: Any) = arg match { case (k, v) => "Tuple2: " + k + "," + v case (k, v, w) => "Tuple3: " + k + "," + v + "," + w } def typeMatch(arg: Any) = arg match { case v: Int => "Int:" + v case m: Map[_, _] => "Map:" + m.size case t: (_, _) => "Tuple2: " + t._1 + "," + t._2 case _ => "Unknown type:" + arg } def typeEraseMatch(arg: Any) = arg match { case m: Map[Int, Int] => "Map from Int to Int:" + m.size case l: List[Int] => "Int List: " + l.size case t: (String, String) => "String tuple" + t._1 } def arrayTypeEraseMatch(arg: Any) = arg match { case ia: Array[Int] => "Int Array: " + ia.length case sa: Array[String] => "String List: " + sa.length } def precedenceMatch(arg: Any) = arg match { case e: IllegalArgumentException => "This is an IllegalArgumentException" case e: Exception => "This is an Exception." } def optionMatch(arg: Option[_]) = arg match { case Some(s) => s case None => "?" } //等同于 abstract class Animal { /*empty body*/} abstract class Animal //1. 无参的case class已经deprecated //2. name默认成为case class的val field //3. 无需new Cat("kitty") //4.可以copy进行构造一个全新的case class,只有部分属性不同的情况很合适 //5. match/case匹配,match/case class匹配,=>用于分隔模式和模式匹配结果的表达式 //6. match/case匹配,match/case class匹配,case中的属性值,可以使用变量指代或者_指代 //7. case _ => expr,表达的是模糊匹配或者任意匹配 //8.常量匹配 //9. List匹配 //10. Tuple匹配 //11.类型匹配 //12. 集合元素的类型运行时擦除:List,Map,Tuple,不包括数组 //13. 数组元素类型运行时不檫除 //14.匹配优先级,类似switch/case+break //15. Option case class Cat(name: String) extends Animal case class Dog(name: String) extends Animal case class Horse(name: String, age: Int, weight: Double) def main(args: Array[String]) { println(Cat("kitty")) println(Cat("kitty").name) println(new Dog("carl")) val h1 = Horse("H", 8, 121.1) val h2 = h1.copy(name = "X") println(h2) println(simpleMatch(100)) println(simpleMatch(100, "200")) println(caseClassMatch(Dog("Carl"))) println(caseClassMatch(Horse("H", 11, 222.2))) //常量匹配 println(constantMatch(3)) println(constantMatch(1 == 1)) println(constantMatch("3")) println(constantMatch(null)) println(constantMatch(Nil)) //Nil表示空List //部分匹配 println(partialMatch(List(0, 1, 2))) println(partialMatch(List(0, 1, 2, 3))) //元组匹配 println(tupleMatch(1, 2)) println(tupleMatch("One", "Tow", "Three")) //类型匹配 println(typeMatch(100)) println(typeMatch(Map(1 -> 2, 2 -> 3))) println(typeMatch(("One", "Two"))) println(typeMatch(("One", "Two", "Three"))) //Unknown type //类型的运行时擦除:List,Map,Tuple println(typeEraseMatch(Map(1 -> 1, 2 -> 2))) //匹配m成功 println(typeEraseMatch(Map("One" -> "One", "Two" -> "Two"))) //匹配m成功 println(typeEraseMatch(List(1, 2, 3))) //匹配l成功 println(typeEraseMatch(List("One", "Two", "Three"))) //匹配l成功 println(typeEraseMatch((1, 1))) //匹配t成功 println(typeEraseMatch(("One", "One"))) //匹配t成功 println(arrayTypeEraseMatch(Array(1, 2))) //匹配ia成功 println(arrayTypeEraseMatch(Array("One", "Two"))) //匹配sa成功 println(precedenceMatch(new IllegalArgumentException())) println(precedenceMatch(new NullPointerException())) //Option匹配 println(optionMatch(Map("One"->"Two").get("One"))) //Two println(optionMatch(Map("One"->"Two").get("1"))) //? } }
A case class is a simple type of immutable class that comes with implementations of all of the basic Java class methods, like toString, equals, and hashCode, which makes them very easy to use
相关推荐
本文将详细介绍 Scala 语言 for 循环中的六种模式匹配方式:变量模式匹配、常量模式匹配、变量绑定模式匹配、类型模式匹配、构造函数模式匹配和序列模式匹配。 变量模式匹配 在 Scala 语言中,变量模式匹配是最...
它的语法简洁,支持高阶函数、模式匹配、匿名函数、类型推断等特性,使得代码更加简洁和易于理解。 2. 版本2.12.x: Scala的版本号通常以主版本号.次版本号.修订号的形式表示。2.12.x系列是Scala的一个主要分支,...
本教程将深入探讨Scala中的Case Class和模式匹配这两个关键概念,通过实例和源代码帮助你理解和掌握它们。下面是对每个知识点的详细说明。 **Case Class** 在Scala中,Case Class是一种特殊的类,它被设计用于模式...
本课程内容涵盖多个关键概念,如模式匹配、样例类、隐式函数和异常处理及泛型,这些都是Scala语言强大特性的体现。 首先,Scala的模式匹配是一种强大的控制流构造,类似于Java中的switch语句,但更为灵活。它允许...
Scala作为一种兼具面向对象和函数式编程特性的现代语言,通过一系列高级语言特性(如模式匹配、类型推断等)使得许多设计模式的实现更加简洁高效。 #### 二、Scala中的设计模式 接下来,我们将具体介绍几种在Scala...
- Scala 的模式匹配更强大,支持值匹配、类型匹配、提取器对象等,而 Java 的 switch-case 仅限于值比较。 14. **Scala 与 Java 的五点区别**: - Scala 支持函数式编程,Java 主要是面向对象。 - Scala 有更...
- **模式匹配**:Scala中的模式匹配是一种强大的工具,可以在模式匹配语句中使用各种类型的模式,如case类、元组等,这为实现某些设计模式提供了便利。 - **高阶函数**:Scala支持高阶函数,即函数作为参数传递给...
模式匹配是Scala中的一个核心概念,它允许程序员按照模式来检查数据。模式匹配包括变量模式、类型化模式、字面值模式等多种形式,并且支持模式中的类型参数推断。模式匹配表达式和模式匹配匿名函数为处理数据提供了...
1. **案例类(Case Classes)**:这是Scala中一种特殊的类,主要用于模式匹配。它们自动实现了`equals`和`hashCode`方法,以及`toString`方法,非常适合用作模式匹配中的模式。 2. **提取器(Extractors)**:在...
它可以处理复杂的数据结构,如case类和模式匹配,这在处理数据时非常有用。 2. **面向对象编程**:Scala支持传统的面向对象编程,包括类、接口、继承和多态。不过,它还引入了特质(trait),这是一种更轻量级的...
5. **模式匹配**:Scala的模式匹配允许解构复杂数据结构,如`case`语句用于匹配不同情况,常用于解析数据或实现算法。 6. **Actor模型**:Akka框架是Scala生态系统的一部分,它提供了一种基于Actor模型的并发处理...
- 枚举与case类:Scala中的枚举和case类为模式匹配提供了便利,使代码更简洁、可读性更强。 - 解构:模式匹配允许对复合类型进行解构,提取出内部元素。 7. **特质(Traits)** - 特质是Scala的多重继承机制,...
例如,`case (a, b) => a + b` 是一个简单的模式匹配例子。 4. **高阶函数**:函数在Scala中是第一类公民,可以作为参数传递,也可以作为返回值。这使得函数式编程成为可能。 5. **面向对象编程**:Scala支持类和...
模式匹配结合Scala的case类,使得模式匹配不仅限于简单的数据类型,还能应用于复杂的数据结构和算法设计。 并发编程是本书的重点,Scala通过Actor模型提供了一种高效、安全的并发机制。Actor是独立运行的实体,通过...
9. **Case类和Case对象**:Scala中的Case类和Case对象简化了模式匹配和数据表示,常用于创建不可变的、具有元组样式的数据结构。 10. **类型类**:类型类是一种设计模式,它允许在运行时添加新的行为到已有类型上,...
4. **模式匹配**:Scala的模式匹配允许程序员以声明式的方式处理数据结构。它可以用于解构复杂的数据结构,如case类和数组,简化了处理和分析数据的过程。 5. **Actor模型**:Scala集成了Akka库,提供了基于Actor...
- **模式匹配:** Scala的模式匹配功能允许我们对值进行解构,便于处理复杂数据结构。 - **case类:** Scala的case类简化了创建不可变对象的过程,并且与模式匹配紧密配合。 - **高阶函数:** 函数可以作为参数...
7. 高级语法:如元组、模式匹配、case类和对象表达式,提供了强大的表达能力,使得编写复杂逻辑变得更加简单。 SBT作为Scala项目的主要构建工具,具有以下特点: 1. 依赖管理:SBT使用 Ivy 库来处理依赖,可以从...
5. 特性与模式匹配:Scala支持特性(trait),这是一种轻量级的抽象类型,可以用来实现多重继承。模式匹配是Scala的一个强大特性,可以用于解构复杂的数据结构,简化条件判断和数据处理。 6. 高级语法:Scala的语法...
`case class`还支持模式匹配,使得Actor可以轻松地处理不同类型的消息。例如,创建一个处理用户注册和登录的`UserManageActor`: ```scala case class Login(username: String, password: String) case class ...