Как повторно использовать параметр класса в случае классов?

У меня есть один класс сущности, подобный этому:

case class Entity(id: Integer, name: String)

И код команды класса:

trait GeneralCommand {
      val id: Option[Integer]
}

sealed abstract class EntityCommands(id: Option[Integer]) extends DomainCommand {
  def this(id: Integer) = this(Option(id))
}

case class UpdateEntity(entity: Entity, id: Integer = entity.id) extends EntityCommands(id)

В Intellij Idea этот код не выделен. Но sbt clean compile жалуется что:

not found: value entity
case class UpdateEntity(entity: Entity, id: Integer = entity.id) extends EntityCommands(id)
                                                      ^

Можно ли повторно использовать параметр в случае класса в Scala?

3 ответа

Какой смысл использовать идентификатор в классе дела? Будет ли этого достаточно?

case class UpdateEntity(entity: Entity) extends EntityCommands(entity.id) {
  val id = Option(entity.id)
}

Насколько я знаю, вы не можете сделать это (где-то в SO была связанная проблема, которую я не могу найти в данный момент), простое решение - добавить метод apply:

case class UpdateEntity(entity: Entity, id: Integer) extends EntityCommands(id)

object UpdateEntity {
  def apply(ent: Entity) = new UpdateEntity(ent, ent.id)
}

Вы можете сделать это, используя несколько списков параметров:

case class UpdateEntity(entity: Entity)(id: Integer = entity.id) extends EntityCommands(id)

Но это происходит за счет невозможности использования второго параметра в сопоставлении с образцом.

Другие вопросы по тегам