Как повторно использовать параметр класса в случае классов?
У меня есть один класс сущности, подобный этому:
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)
Но это происходит за счет невозможности использования второго параметра в сопоставлении с образцом.