y las diferencias de clase de la clase caso Scala

En Scala no es la clase caso, que en realidad es una clase ordinaria. Pero su clase y ordinario ligeramente diferente, de la siguiente manera:
  1, la inicialización cuando se puede no es nuevo, por supuesto, también se puede añadir, cierta categoría general necesidad de añadir nuevos;

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 lograr más bella;

scala> iteblog
res 5 : Iteblog = Iteblog(iteblog _ hadoop)

  3, la implementación predeterminada de iguales y 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, el valor predeterminado se serializa, que se realiza 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 @ 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, heredará automáticamente de scala.Product alguna función;
  6, constructor de la clase caso parámetro es nivel público, que tenga acceso directo;

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

  7, el apoyo a la coincidencia de patrones;
  de hecho, la sensación de clase caso debe ser el más importante admita la función de coincidencia de patrones. Esta es la única razón por la que definimos la clase caso, no es de extrañar Scala funcionario también dijo: que tiene sentido sólo el definir clases caso si se utiliza para la coincidencia de patrones para descomponer las estructuras de datos.  . Consideremos el siguiente ejemplo:

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))
}

Supongo que te gusta

Origin www.cnblogs.com/guoyu1/p/12599575.html
Recomendado
Clasificación