Scala中存在case class,它其实就是一个普通的class。但是它又和普通的class略有区别,如下:

1、初始化的时候可以不用new,当然你也可以加上,普通类一定需要加new;

scala> case class Iteblog(name:String)
defined class Iteblog
 
scala> val iteblog = Iteblog("iteblog_hadoop")
iteblog: Iteblog = Iteblog(iteblog_hadoop)
 
scala> val iteblog = new Iteblog("iteblog_hadoop")
iteblog: Iteblog = Iteblog(iteblog_hadoop)
 
2、toString的实现更漂亮;
scala> iteblog
res5: Iteblog = Iteblog(iteblog_hadoop)
 
3、默认实现了equals 和hashCode;
scala> val iteblog2 = Iteblog("iteblog_hadoop")
iteblog2: Iteblog = Iteblog(iteblog_hadoop)
 
scala> iteblog == iteblog2
res6: Boolean = true
 
scala> iteblog.hashCode
res7: Int = 57880342
 
4、默认是可以序列化的,也就是实现了Serializable ;
scala> class A
defined class A
 
scala> import java.io._
import java.io._
 
scala> val bos = new ByteArrayOutputStream
bos: java.io.ByteArrayOutputStream =
 
scala> val oos = new ObjectOutputStream(bos)
oos: java.io.ObjectOutputStream = java.io.ObjectOutputStream@4c257aef
 
scala> oos.writeObject(iteblog)
 
scala> val = new A
a: = $iwC$$iwC$A@71687b10
 
scala> oos.writeObject(a)
java.io.NotSerializableException: $iwC$$iwC$A
 
5、自动从scala.Product中继承一些函数;
6、case class构造函数的参数是public级别的,我们可以直接访问;
scala> iteblog.name
res11: String = iteblog_hadoop
 
7、支持模式匹配;
其实感觉case class最重要的特性应该就是支持模式匹配。这也是我们定义case class的唯一理由,难怪Scala官方也说:It makes only sense to define case classes if pattern matching is used to decompose data structures. 。来看下面的例子:
object TermTest extends scala.App {
  def printTerm(term: Term) {
    term match {
      case Var(n) =>
        print(n)
      case Fun(x, b) =>
        print("^" + x + ".")
        printTerm(b)
      case App(f, v) =>
        print("(")
        printTerm(f)
        print(" ")
        printTerm(v)
        print(")")
    }
  }
  def isIdentityFun(term: Term): Boolean = term match {
    case Fun(x, Var(y)) if == =true
    case _ =false
  }
  val id = Fun("x", Var("x"))
  val = Fun("x", Fun("y", App(Var("x"), Var("y"))))
  printTerm(t)
  println
  println(isIdentityFun(id))
  println(isIdentityFun(t))
}
 

Scala class和case class的区别的更多相关文章

  1. scala 学习: case class

    case class: 1.定义为case class 的类在实例化时,可以不使用new 关键字. case class People(name:String, age:Int) val zhangs ...

  2. scala之method和function的区别

    在我没有学习scala的时候,主要用java和python做日常工作开发,印象中,没有特别的刻意的去区分method和function的区别,这个关系,正如我们日常生活中,没有刻意的去区分质量和重量. ...

  3. oracle中DECODE与CASE的用法区别

    对于CASE与DECODE其实并没有太多的区别,他们都是用来实现逻辑判断.Oracle的DECODE函数功能很强,灵活运用的话可以避免多次扫描,从而提高查询的性能.而CASE是9i以后提供的语法,这个 ...

  4. if语句,if...else if语句和switch...case语句的区别和分析

    前段时间在工作中遇到了一个关于条件判断语句的问题,在if语句,if else if语句和switch case语句这三者之间分析,使用其中最有效率的一种方法. 所以就将这个问题作为自己第一篇博客的主要 ...

  5. Scala中==,eq与equals的区别

    根据官方API的定义: final def ==(arg0: Any): Boolean The expression x == that is equivalent to if (x eq null ...

  6. Scala 中object和class的区别

    Scala中没有静态类型,但是有有“伴侣对象”,起到类似的作用. Scala中类对象中不可有静态变量和静态方法,但是提供了“伴侣对象”的功能:在和类的同一个文件中定义同名的Object对象:(须在同一 ...

  7. Scala中class和object的区别

    1.class scala的类和C#中的类有点不一样,诸如: 声明一个未用priavate修饰的字段 var age,scala编译器会字段帮我们生产一个私有字段和2个公有方法get和set ,这和C ...

  8. Scala中 object 和 class的区别

    object 在scala中没有静态方法和静态字段,所以在scala中可以用object来实现这些功能,直接用对象名调用的方法都是采用这种实现方式,例如Array.toString.对象的构造器在第一 ...

  9. Scala中 => Unit 与 () =>Unit的区别

    () => Unit ---> 是一个函数:=> Unit --> 是一个执行结果为Unit的表达式 code: => Unit是 by name 传递参数.参数是一个返 ...

随机推荐

  1. Smartform给文本绑定值

    点击字段显示器, 然后把字段拖过去即可

  2. tensorflow增强学习应用于一个小游戏

    首先需要安装gym模块,提供游戏的. 1,所需模块 import tensorflow as tf import numpy as np import gym import random from c ...

  3. 【神经网络与深度学习】基于Windows+Caffe的Minst和CIFAR—10训练过程说明

    Minst训练 我的路径:G:\Caffe\Caffe For Windows\examples\mnist  对于新手来说,初步完成环境的配置后,一脸茫然.不知如何跑Demo,有么有!那么接下来的教 ...

  4. docker安装jenkins自动化部署

    Docker之Jenkins自动化部署 1.拉取jenkins镜像images(类比:java中的类) docker pull jenkinsci/jenkins:lts 或 docker pull ...

  5. ef Migration 的一些基础命令

    cmd ci 命令 dotnet ef migrations add NewColum --新增migrations dotnet ef database update--跟新数据库 dotnet e ...

  6. mysql如何下载历史版本?

    进入官网 www.mysql.com

  7. [CF750G] New Year and Binary Tree Paths

    目录 简单的 组合的 题目链接 简单的 设从节点\(x\)开始不断往左儿子走h-1步,则编号和为\(x\sum_{i=0}^{h-1}2^i=x(2^h-1)\). 若倒数第\(i\)步走向的是右儿子 ...

  8. 04、DAT图像文件

    DAT是芯片的原始扫描图像,如下图: 注:这两张图来自<Bayesian Inference for Gene Expression and Proteomics>.A是U95Av2芯片的 ...

  9. 解决sudo用户找不到环境变量的问题

    出于安全方面的考虑,使用sudo执行命令将在一个最小化的环境中执行,环境变量都重置成默认状态.所以PATH这个变量不包括用户自定义设置的内容 在sudo用户的主目录里的.bashrc中添加如下内容即可 ...

  10. sql server 函数详解(2)数学函数

    绝对值函数ABS(x)和返回圆周率的函数PI() 平方根函数SQRT(x) 获取随机函数的函数RAND()和RAND(x) 四舍五入函数ROUND(x,y) 符号函数SIGN(x) 获取整数的函数CE ...