【scala初学】class , object ,case classes

本文深入探讨Scala中class、object及case class的概念与区别。详细解释了object作为单例类的使用方式,以及case class在模式匹配中的作用,并通过实例展示了它们如何在Scala程序中被应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前面章节里,我们了解了 class ,object的区别,简单回顾下

calss 静态模板(理解成传统的class就可以)

object 单例类,对object做点补充

1. 既然是单例,就不能被new,如object名为SharkObj不能写成

1
2
//var so = new SharkObj //error
var so = SharkObj //正确

2. 可以直接写类名调用方法,假设SharkObj有方法m(x:Int)

1
SharkObj.m(1)

 

那case classes 又是做什么的呢? 你可以就把他理解成一个普通的class,但是又略有不同,总结如下:

  1. 不需要写 new, 但是可以写

  2. 默认是public ,在任何地方调用

  3. 默认实现了toString

  4. 不能被继承

 

对case calss的质疑声音比较高,感觉价值不大。官方原文:

It makes only sense to define case classes if pattern matching is used to decompose data structures.

 

当然,只有在pattern matching下有意义这话未免有所偏激,至少部分老程序员会有其他意见:

get auto-generated equals, hashCode, toString, static apply() for shorter initialization, etc.

 

这里简单表示下,理解为 match case的控制语句

下面把官方例子贴给大家:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
abstract class Term
case class Var(name: String) extends Term
case class Var1 extends Term
case class Fun(arg: String, body: Term) extends Term
case class App(f: Term, v: Term) extends Term
 
object TermTest extends scala.App {
  def printTerm(term: Term) {
    term match {
      case Var(n) =>
        print(n)
      case Fun(x1, b) =>
        print("^" + x1 ".")
        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))
  println(new Var1==new Var1);
  println(new Var("")==new Var("1"));
}









本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/1415533,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值