youtubers tesis sobre sirve resumida que para investigaciones investigacion historia caracteristicas scala

scala - sirve - tesis sobre youtube pdf



Diferencia entre objeto de caso y objeto. (5)

¿Hay alguna diferencia entre el objeto de caso y el objeto en Scala?


Aquí hay una diferencia: los objetos de caso extienden el rasgo Serializable , por lo que pueden ser serializados. Los objetos regulares no pueden por defecto:

scala> object A defined module A scala> case object B defined module B 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@e7da60 scala> oos.writeObject(B) scala> oos.writeObject(A) java.io.NotSerializableException: A$


Es similar con la case class y la class , solo usamos el case object de case class lugar de la case class de case class cuando no hay campos que representen información de estado adicional.


Las clases de casos difieren de las clases regulares en que obtienen:

  1. soporte de coincidencia de patrones
  2. implementaciones por defecto de equals y hashCode
  3. implementaciones por defecto de serialización
  4. una implementación por defecto más bonita de toString , y
  5. la pequeña cantidad de funcionalidad que obtienen al heredar automáticamente de scala.Product .

La coincidencia de patrones, los iguales y el código hash no importan mucho para los singletons (a menos que hagas algo realmente degenerado), por lo que simplemente obtienes una serialización, una buena toString y algunos métodos que probablemente nunca usarás.


los objetos de caso vienen implícitamente con implementaciones de métodos toString, equals y hashCode, pero los objetos simples no lo hacen. los objetos de caso pueden ser serializados mientras que los objetos simples no pueden ser serializados, lo que hace que los objetos de caso sean muy útiles como mensajes con Akka-Remote. Agregar la palabra clave del caso antes de la palabra clave del objeto hace que el objeto sea serializable.


scala> object foo

objeto definido foo

scala> case object foocase

objeto definido para foocase

Diferencia de serialización:

scala> foo.asInstanceOf[Serializable]

java.lang.ClassCastException: foo $ no se puede convertir a scala.Serializable
... 43 elidido

scala> foocase.asInstanceOf[Serializable]

res1: serializable = foocase

aString diferencia:

scala> foo

res2: foo.type = foo $ @ 7bf0bac8

scala> foocase

res3: foocase.type = foocase