case class Var(name:String) extends Expr
case class Number(num:Double) extends Expr
case class UnOp(operator:String, arg:Expr) extends Expr
case class BinOp(operator:String,left:Expr,right:Expr) extends Expr
首先写一个样例类Demo
运行后,使用反编译打开,会发现一个样例类 Dollar会生成Dollar$.class和Dollar.class文樱者件
首先来看Dollar$.class
然后Dollar.class
1、样例类默认实现了埋颂扰序列化,实现了scala的Product
2、构造器中的value当成了属性,且默认都是val(对应Java的final)
3、默认实现了apply和unapply,这就是为何样例类不用new可以直接使用的原
4、默认实弯旦现了常用的toString/equals/hashCode/copy方法
Scala的case class使得对对象进行模式匹配变得非常方便,简单的来说,Scala的case class就是在普通的类定义前加case这个关键字,举好禅然后你可以对这些类来模式匹配。正尘在我们详细介绍Scala的Case class和模式匹配之前,我们可以通过一个简单的例子来说明一些基本概念。我们设计一个函数库,这个函数库可以袜袭用来计算算术表达式,为简单起见,我们设计的算术表达式只侧重于变量,数字,单 *** 作符,和双 *** 作符。我们可以采用如下的Scala类定义:
abstract class Expr
case class Var(name:String) extends Expr
case class Number(num:Double) extends Expr
case class UnOp(operator:String, arg:Expr) extends Expr
case class BinOp(operator:String,left:Expr,right:Expr) extends Expr
这里我们定义了一个抽象类Expr和四个子类(分别代表变量,数值,单 *** 作符,双 *** 作符),Scala允许我们不定义类的实现,实际我们是class C 和 class C {}是等价的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)