Scalaのケースクラスの違いとクラス

ではScalaの実際に普通のクラスであるケースクラスは、そこにあります。しかし、それのクラスと普通のわずかに異なるが、以下のように:
  1、あなたは新しいものではない、もちろん、あなたはまた、新しい追加するために、特定の一般的なカテゴリの必要性を追加することができ、初期化時に、

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
res 5 : Iteblog = Iteblog(iteblog _ hadoop)

  3、等号とhashCodeのデフォルトの実装。

scala> val iteblog 2 = Iteblog( "iteblog_hadoop" )
iteblog 2 : Iteblog = Iteblog(iteblog _ hadoop)
 
scala> iteblog == iteblog 2
res 6 : Boolean = true
 
scala> iteblog.hashCode
res 7 : Int = 57880342

  図4に示すように、デフォルトの直列化が実現され、シリアル化されました。

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 @ 4 c 257 aef
 
scala> oos.writeObject(iteblog)
 
scala> val a = new A
a : A = $iwC$$iwC$A @ 71687 b 10
 
scala> oos.writeObject(a)
java.io.NotSerializableException : $iwC$$iwC$A

  5、自動的にscala.Productからいくつかの機能を継承し、
  6、パラメータケースクラスのコンストラクタは、私たちが直接アクセスすることができ、公共のレベルです。

scala> iteblog.name
res 11 : String = iteblog _ hadoop

  図7は、パターンマッチングのためのサポート、
  実際には、感情ケースクラスは、最も重要な機能のサポートパターンマッチングでなければなりません。これは、我々はケースクラスを定義する唯一の理由である、不思議Scalaの公式も言っていない:それは唯一のIFが分解しデータ構造のためのパターンマッチングに使用した場合のクラスを定義することは理にかなって。 次の例を考えてみます。

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 x == y = > true
     case _ = > false
   }
   val id = Fun( "x" , Var( "x" ))
   val t = Fun( "x" , Fun( "y" , App(Var( "x" ), Var( "y" ))))
   printTerm(t)
   println
   println(isIdentityFun(id))
   println(isIdentityFun(t))
}

おすすめ

転載: www.cnblogs.com/guoyu1/p/12599575.html