tutorial meaning lightbend anime scala akka

scala - meaning - akka wikipedia



¿Diferencia entre la clase de caso y el objeto de caso? (4)

En palabras simples, Scala es un lenguaje de programación orientado a objetos y funcional. Tiene características de programación funcional como la coincidencia de patrones con la metodología pura orientada a objetos.

Algunas veces, necesitamos crear un objeto singleton sin ningún valor como pasar alguna señal para la coincidencia de patrones. Si scala no tiene el concepto de objeto de caso, solo necesitamos usar enum o igualar algún valor de cadena en la coincidencia. Pero esto no es una legibilidad en el lenguaje puro orientado a objetos. En ese escenario estamos usando Case Object

Las clases de casos se usan cuando necesitamos crear múltiples objetos con diferentes valores.

Estoy aprendiendo Scala y Akka y en mi búsqueda reciente de una solution , encontré algo así como

case class TotalTaxResult(taxAmount:Double) case object TaxCalculationTimeout

¿Cuál es la diferencia entre los dos?

¿Cuándo debería usar uno sobre el otro?


Puedes pensar que estos dos son como una clase y un objeto en general. Cuando se hace una clase de caso ClassName (lista de parámetros), se crea un plan para hacer objetos y el objeto caso define un objeto singleton en el ámbito en el que se declara. Comenzando con Scala 2.10, siempre debe usar objetos de casos en lugar de clases de casos sin argumentos. Entonces, cuando quiera hacer una coincidencia de patrón en algunos valores que necesitan argumentos, debe elegir una clase de caso, pero si sus valores no toman argumentos, entonces debe usar un objeto de caso.


Un objeto caso es una clase de caso singleton. Se usan como valores de enumeración. Se puede usar en la coincidencia de patrones como cualquier otro valor:

TaxCalculationTimeout match { case TaxCalculationTimeout => println("hello") }

Cuando define una clase de caso, está creando una plantilla para las instancias de esa clase. TotalTaxResult(1.0) y TotalTaxResult(2.0) son dos valores diferentes del mismo tipo. Mientras que hay exactamente un valor TaxCalculationTimeout .


Una clase de caso puede tomar argumentos, por lo que cada instancia de esa clase de caso puede ser diferente en función de los valores de sus argumentos. Por otro lado, un objeto de caso no toma argumentos en el constructor, por lo que solo puede haber una instancia (un singleton, como un object scala normal).

Si su mensaje a su actor no necesita ninguna diferenciación de valor, use un objeto de caso. Por ejemplo, si tuvieras un actor que hiciera algún trabajo, y tú, desde fuera, quisieras decirle que trabaje, entonces tal vez harías algo como esto:

case object DoWork ... def receive = { case DoWork => //do some work here }

Pero si desea alguna variación en la forma en que se realiza el trabajo, es posible que deba redefinir su mensaje de la siguiente manera:

case class DoWorkAfter(waitTime:Long) ... def receive = { case class DoWorkAfter(time) => context.system.scheduler.scheduleOnce(time.milliseconds, self, DoWork) case DoWork => //do some work here }