`

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
分享到:
评论

相关推荐

    Scala编程详解 第12讲-Scala编程详解:面向对象编程之类 共12页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12...第18讲-Scala编程详解:模式匹配 共11页 第19讲-Scala编程详解:类型参数 共13页 第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    scala编程中文pdf

    scala编程 33章 中文pdf Scala编程实战 目录 第1章字符串. 11 第2章数值39 第3章控制结构.60 第4章类和属性.103 第5章方法147 第6章对象170 第7章包和导入.190 第8章特质200 第9章函数式编程214 第10 章集合242 第...

    Scala编程详解 第14讲-Scala编程详解:面向对象编程之继承 共13页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12...第18讲-Scala编程详解:模式匹配 共11页 第19讲-Scala编程详解:类型参数 共13页 第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    Scala编程详解 第13讲-Scala编程详解:面向对象编程之对象 共9页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12...第18讲-Scala编程详解:模式匹配 共11页 第19讲-Scala编程详解:类型参数 共13页 第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

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

    scala for循环中的模式匹配:1)变量模式匹配2)常量模式匹配3)变量绑定模式匹配4)类型模式匹配5)构造函数模式匹配6)序列模式匹配

    Scala编程详解 第4讲-Scala编程详解:条件控制与循环 共7页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12...第18讲-Scala编程详解:模式匹配 共11页 第19讲-Scala编程详解:类型参数 共13页 第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

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

    【课程大纲】 第1讲-Spark的前世今生 共12...第18讲-Scala编程详解:模式匹配 共11页 第19讲-Scala编程详解:类型参数 共13页 第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    Scala编程详解 第19讲-Scala编程详解:类型参数 共13页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12...第18讲-Scala编程详解:模式匹配 共11页 第19讲-Scala编程详解:类型参数 共13页 第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    Scala编程详解 第8讲-Scala编程详解:函数入门之过程、lazy值和异常 共5页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12...第18讲-Scala编程详解:模式匹配 共11页 第19讲-Scala编程详解:类型参数 共13页 第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    Scala编程详解 第9讲-Scala编程详解:数组操作之Array、ArrayBuffer以及遍历数组 共7页.pptx

    【课程大纲】 第1讲-Spark的前世今生 共12...第18讲-Scala编程详解:模式匹配 共11页 第19讲-Scala编程详解:类型参数 共13页 第20讲-Scala编程详解:隐式转换与隐式参数 共9页 第21讲-Scala编程详解:Actor入门 共8页

    scala正则表达式与模式匹配.doc

    scala正则表达式在模式匹配中的应用:提取模式的分组值,通过代码理解正则表达式与模式匹配的原理。

    Scala编程 第3版中文版.7z

    《Scala编程(第3版)》由直接参与Scala开发的一线人员编写,因而对原理的解读和应用的把握更加值得信赖。《Scala编程(第3版)》面向具有一定编程经验的开发者,目标是让读者能够全面了解和掌握Scala编程语言的核心...

    Scala编程(第3版)

    《Scala编程(第3版)》面向具有一定编程经验的开发者,目标是让读者能够全面了解和掌握Scala编程语言的核心特性,并能够深入理解Scala这门语言在设计取舍背后的动因。即便是不直接使用Scala或从事一线编程工作的...

    Scala编程实战(包含源码)完整版Alvin Alexander著.part1.rar

    Scala编程实战(包含源码)完整版Alvin Alexander著.part1.rar

    Scala编程 pdf

    内含Scala编程PDF版书籍 可详细学习Scala编程 内含Scala编程PDF版书籍 可详细学习Scala编程

    《scala编程》第3版英文版&第3版源码

    资源包含《Scala编程》第3版英文版和第3版源代码,Scala编程第3版,目前是最新版,支持Scala 2.11以上。《Scala编程》是Scala语言的创始人参与编写的,涵盖的语法特性非常全面,并且作者解释了为什么这么设计,有...

    Scala编程(第三版)中英文.zip

    Scala编程(第三版)中英文,代码全 Martin Odersky 是Scala 编程语言的缔造者。他是瑞士洛桑理工学院(EPFL)的教授,同时也是Typesafe, Inc.(已更名为Lightbend)的创始人。他的研究方向是编程语言和系统,更具体...

    Scala函数式编程

    很大篇幅都放在,使用scala实现scala默认库文件的API中,通过对简单的函数式编程逻辑的介绍和实践,主要是实践,建立起来一个比较明晰的scala思维模式,或者叫函数式编程的思维模式。 2 无副作用的函数式编程,同时...

    scala编程指南第三版

    spark,scala编程指南第三版,非常好的资料,高清无水印

    Scala_Scala编程

    Scala编程;Scala编程;Scala编程;Scala编程;Scala编程

Global site tag (gtag.js) - Google Analytics