【scala初学】class , object ,case classes

简介:

在前面章节里,我们了解了 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  Var 1  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(x 1 , b)  = >
         print( "^"  + x 1  "." )
         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  Var 1 == new  Var 1 );
   println( new  Var( "" ) == new  Var( "1" ));
}









本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/1415533,如需转载请自行联系原作者
目录
相关文章
|
22天前
|
前端开发 JavaScript Java
Java基础10-深入理解Class类和Object类(二)
Java基础10-深入理解Class类和Object类(二)
21 5
|
22天前
|
Java C++
Java基础10-深入理解Class类和Object类(一)
Java基础10-深入理解Class类和Object类(一)
19 4
|
2月前
|
存储 设计模式 Python
Python中的类(Class)和对象(Object)
Python中的类(Class)和对象(Object)
49 0
|
2月前
|
分布式计算 Java Scala
Scala:面向对象、Object、抽象类、内部类、特质Trait(二)
Scala:面向对象、Object、抽象类、内部类、特质Trait(二)
73 0
error : Class declarations lacks Q_OBJECT macro
error : Class declarations lacks Q_OBJECT macro
synchronized(this)、synchronized(class)和synchronized(Object)的区别
synchronized(this)、synchronized(class)和synchronized(Object)的区别
81 0
synchronized(this)、synchronized(class)和synchronized(Object)的区别
|
Java 编译器 Scala
【Scala】Scala之Classes and Properties(一)
前面学习了控制结构,下面学习Scala的Class和Properties。
147 0
【Scala】Scala之Classes and Properties(一)
|
Java
JAVA同步锁 synchronized(this)、synchronized(class)与synchronized(Object)的区别
利用实例介绍JAVA同步锁 synchronized(this)、synchronized(class)与synchronized(Object)的区别
125 0
JAVA同步锁 synchronized(this)、synchronized(class)与synchronized(Object)的区别
|
算法 编译器 Scala
【Scala】Scala之Object(二)
前面学习了Scala的Methods,接着学习Scala中的Object
109 0
【Scala】Scala之Object(二)
|
XML IDE Java
【Scala】Scala之Object(一)
前面学习了Scala的Methods,接着学习Scala中的Object
194 0
【Scala】Scala之Object(一)