Подтвердить что ты не робот

Разница между классом case и объектом объекта?

Я изучаю Scala и Akka, и в своем недавнем поиске решения я нашел что-то вроде

 case class TotalTaxResult(taxAmount:Double)
 case object TaxCalculationTimeout

В чем разница между двумя?

Когда я должен использовать один над другим?

4b9b3361

Ответ 1

Класс case может принимать аргументы, поэтому каждый экземпляр этого класса case может быть различным в зависимости от значений его аргументов. Объект case, с другой стороны, не принимает аргументы в конструкторе, поэтому может быть только один его экземпляр (синглтон, как обычный scala object).

Если ваше сообщение вашему актеру не требует какого-либо дифференциации значений, используйте объект case. Например, если у вас был актер, который выполнял какую-то работу, и вы, со стороны, хотели сказать ему, чтобы он работал, тогда, возможно, вы сделали бы что-то вроде этого:

case object DoWork

...

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

Но если вы хотите внести некоторые изменения в работу, вам может потребоваться переопределить ваше сообщение так:

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
}

Ответ 2

Объект case - это класс case singleton. Они используются как значения перечисления. Его можно использовать в сопоставлении с образцом, как и любое другое значение:

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

Когда вы определяете класс case, вы создаете шаблон для экземпляров этого класса. TotalTaxResult(1.0) и TotalTaxResult(2.0) - два разных значения одного и того же типа. Если имеется ровно одно значение TaxCalculationTimeout.

Ответ 3

Вы можете думать об этих двух, чтобы они были как класс и объект в целом. Когда вы делаете класс класса ClassName (список параметров), он создает схему для создания объектов, а объект case определяет одноэлементный объект в области, в которой он объявлен. Начиная с Scala 2.10, вы всегда должны использовать объекты case вместо классов case без аргументов. Поэтому, когда вы хотите выполнить сопоставление шаблона с некоторыми значениями, для которых нужны аргументы, вы должны пойти для класса case, но если ваши значения не принимают аргументы, вы должны использовать объект case.

Ответ 4

Простыми словами Scala является объектно-ориентированным и функциональным языком программирования. Он имеет функции функционального программирования, такие как сопоставление образцов с чисто объектно-ориентированной методологией.

Несколько раз нам нужно создать одноэлементный объект без какого-либо значения, например, передать некоторый сигнал для сопоставления шаблонов. Если Scala не имеет понятия объекта case, нам просто нужно использовать enum или равно некоторому строковому значению в сопоставлении. Но это не читаемость на чисто объектно-ориентированном языке.. В этом сценарии мы используем Case Object

Классы классов используются, когда нам нужно создать несколько объектов с разными значениями.