`

Scala编程之样本类与模式匹配

 
阅读更多

一、总述

       在今天的Scala编程的学习过程中,发现了Scala语言中十分有趣的东西:样本类、模式匹配。对于样本类和模式匹配的概念,鄙人通过一个自己编写的实例给出对应的说明。

 

二、实例展示

       1、定义一个抽象类Expr,并且在该类的内部定义了几个不同的类,如代码中所示:

/**
  * Created by user on 2016/1/21.
  */
abstract class Expr
case class Var(name: String) extends Expr
case class Number(number: Double) extends Expr
case class UnOp(operator: String, arg: Expr) extends Expr
case class BinOp(operator: String, left: Expr, right: Expr) extends Expr

       

        2、定义一个模式匹配的类,具体内容如代码中所示:

/**
  * Created by user on 2016/1/21.
  */
class PatternMatch(arg: Double){
   def simplifyTop(expr: Expr): Expr = expr match {
      //双重负号
      case UnOp("-", UnOp("-",e)) => e

      //加arg
      case BinOp("+", e, Number(arg)) => e

      //乘arg
      case BinOp("*", e, Number(arg)) => e

      //除以arg
      case BinOp("/", e, Number(arg)) => e

      case _ => expr
   }
}

 

        3、定义object用于测试

/**
  * Created by user on 2016/1/21.
  */
object Opt extends App{
  //需要匹配的模式样本
  val v = Var("x")

  val binOp = BinOp("+", Number(1), v)
  val arg = Double.box(10)
  println("case class test result: " + v.name + "," + binOp.left + "," + (binOp.right == v))

  def result1: Expr = new PatternMatch(arg).simplifyTop(UnOp("-",UnOp("-",v)))
  println("pattern match test result1: " + (result1 == v))

  def result2: Expr = new PatternMatch(arg).simplifyTop(BinOp("+",result1,Number(arg)))
  println("pattern match test result2: " + (result2 == v))

  def result3: Expr = new PatternMatch(arg).simplifyTop(BinOp("*",result2,Number(arg)))
  println("pattern match test result3: " + (result3 == v))

  def result4: Expr = new PatternMatch(arg).simplifyTop(BinOp("/",result3,Number(arg)))
  println("pattern match test result4: " + (result4 == v))
}

 

三、测试结果

       测试结果如附件中图所示。

 

四、结论

       样本类是指带有case关键字的子类(类)。至于模式匹配,就像代码中展示的那样,可以根据自己的兴趣进行修改需要匹配的样本。

  • 大小: 10 KB
分享到:
评论

相关推荐

    scala3 scala3 scala3 scala3 scala3

    Scala3,也被称为Scala 3或Dotty,是Scala编程语言的一个重大更新,旨在提高其简洁性、可读性和类型安全性。Scala3的发布标志着该语言的进一步成熟,它引入了一系列改进,旨在解决早期版本中的一些痛点,同时保持对...

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

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

    programming in Scala_ch

    - **样本类**: 学习如何定义样本类来简化模式匹配。 - **模式匹配**: 深入理解模式匹配的强大功能。 #### 使用列表 - **列表操作**: 掌握Scala列表的各种操作和方法。 - **列表推导**: 使用列表推导来生成新的列表...

    scala教材.docx

    在 Scala 教程中,我们首先会接触到基础概念,包括表达式、值、函数、类、继承、特质、类型、apply 方法、单例对象、函数即对象、包、模式匹配、样本类以及异常处理机制 try-catch-finally。 1. **表达式**:Scala ...

    scala-sandbox:可重用或样本scala函数的集合

    "scala-sandbox" 这个标题指的是一个与Scala编程语言相关的项目或者库,名为"Scala沙箱"。"沙箱"通常在软件开发中用来指代一个安全环境,允许开发者试验和测试代码而不影响到主系统。在这个上下文中,它可能是一个...

    scala-samples:Scala 示例代码

    在样本代码中,我们可以期待看到如何使用模式匹配进行条件判断和数据解析。 Scala的类型系统是静态的,但非常灵活。它支持类型推断,这意味着编译器可以自动推断出变量或函数的类型,减少了很多显式的类型声明。...

    实时计算项目(Scala结合spark实现).zip

    本项目"实时计算项目(Scala结合Spark实现).zip"显然是一个利用Scala编程语言和Apache Spark框架进行实时数据处理的实践案例。下面将详细介绍这个项目可能涉及的关键知识点。 **Scala语言** Scala是一种多范式编程...

    baidu-bmr-samples-scala:百度-bmr-样本-scala

    1. **Scala 基础**:首先,你需要对 Scala 语言有基本的了解,包括其语法、类、对象、函数、模式匹配等特性。这对于理解示例代码至关重要。 2. **Apache Hadoop MapReduce**:BMR 是基于 Hadoop MapReduce 构建的,...

    scalajb:用于 Scala 的 json 数据绑定工具。 从 json 创建案例类

    标签 "Scala" 明确指出这个工具与 Scala 编程语言紧密相关,因此,它遵循 Scala 的语法和编程范式,并且可能利用 Scala 的特性和功能,如类型系统、模式匹配等,来实现 JSON 数据的处理。 **文件名称列表解析:** ...

    twitterstream:Scala中带有Kafka Streams的Twitter Streaming API示例

    Scala与Kafka Streams的良好集成使得开发人员能够以声明式的方式编写流处理逻辑,同时利用Scala的强大特性,如模式匹配和高阶函数。 以下是在“twitterstream”项目中可能涉及的关键技术点: 1. **设置Twitter API...

    ps-crawler-sample:这是用于获取弹球机信息的爬虫样本

    1. **Scala 编程**:了解 Scala 的基本语法、类型系统、模式匹配和函数式编程特性是理解这个项目的关键。例如,`case classes` 可用于表示数据结构,`for comprehension` 用于优雅地处理迭代和异步操作,` Futures` ...

    ScaRTEC:基于事件演算形式主义的复杂事件识别引擎

    ScaRTEC采用Scala编程语言实现,这是由Apache Software Foundation支持的一种多范式编程语言,特别适合构建大规模并行和分布式计算系统。Scala结合了面向对象和函数式编程的特性,提供了一种强大的工具来处理复杂的...

    2-0+当我们谈论框架时,我们在谈论什么?.pdf

    例如,BIDMach选择了Scala作为编程语言,这既保证了代码的简洁性,又允许大规模并行计算。其架构中还包括一个矩阵层,带有缓存机制,以优化数据处理速度。 在深度学习领域,自动微分(Autograd)是框架的核心组件之...

Global site tag (gtag.js) - Google Analytics