scala case class 这时候该怎么用

scala case class 这时候该怎么用,第1张

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

首先写一个样例类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 {}是等价的。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12333647.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存