Класс корпуса Scala имеет функцию по умолчанию toString. Но когда класс case расширяет черту с существующей функцией toString(), она будет бесполезной. Как я могу предотвратить эту ситуацию?Как избежать переопределения функции toString класса case в Scala?
ответ
ОК здесь является Самым лёгким ответ:
override def toString = ScalaRunTime._toString(this)
конец истории :)
Это СУХОЙ и легкий. –
noob question: Это дало мне ошибки по нескольким причинам; Я получил это для работы: 'override def toString() = ScalaRunTime._toString (this)' (Мне пришлось добавлять parens после 'toString'). Более того, я должен был явно указать свой класс «продлить продукт». Любой способ избежать этого? (Кроме того, я использовал 'import scala.runtime.ScalaRunTime', чтобы избежать полного определения имени.) –
@ not-just-yeti Объявление класса case эквивалентно расширению Product. Другие части связаны с быстрыми клавишами scala в разных версиях и не важны. – tribbloid
Вот обходное решение, которое, как я думаю, может работать, это может быть слишком много церемоний, вы решаете. Он включает trait
.
trait StandardToString { this:Product =>
override def toString = productPrefix + productIterator.mkString("(", ",", ")")
}
Сейчас пытается его с некоторыми образцами:
trait Human {
override def toString() = "Human"
}
case class European(firstName:String) extends Human
и запуская его с чертой:
scala> new European("Falco") with StandardToString
res0: European with StandardToString = European(Falco)
конечно с trait
вы остались с
scala> new European("Adele")
res1: European = Human
Это более точно сказать, что в случае класс toString
не генерируется, а не что он отменяется.
Это не большой ответ или обходной путь.
scala> trait X { override def toString = "X" }
defined trait X
scala> case class Y(i: Int) extends X
defined class Y
scala> Y(42)
res0: Y = X
scala> case class Y(i: Int)
defined class Y
scala> class Z(x: Int) extends Y(x) with X { override def toString = super[Y].toString }
defined class Z
scala> new Z(42)
res1: Z = Y(42)
Вы не можете сделать это с помощью признака:
scala> trait R extends Y { override def toString = super[Y].toString }
<console>:9: error: Implementation restriction: traits may not select fields or methods from super[C] where C is a class
trait R extends Y { override def toString = super[Y].toString }
^
- 1. Как избежать переопределения объекта пакета в Scala?
- 2. scala create equal/hashcode/tostring без класса case
- 3. Scala метод переопределения класса Java
- 4. в Scala, как избежать переопределения super.method() в подклассе?
- 5. Перегрузка класса case в Scala
- 6. Расширение MomentJS для переопределения функции toString()
- 7. == для класса case и класса «non-case» в Scala
- 8. Как читать из класса case в Scala?
- 9. Как избежать переопределения функции (PEP8 ошибки F811)
- 10. scala методы переопределения в дочернем объекте класса
- 11. Какова цель переопределения toString?
- 12. Переопределения выделанных функций в Scala
- 13. Преобразование класса case в CSV в Scala
- 14. scala - преобразовать байт [] в экземпляр класса case
- 15. Поддержание карты объектов класса case в Scala
- 16. Macro аннотации переопределить ToString функции Scala
- 17. ToString в Scala
- 18. Как избежать переопределения метода класса в специализации шаблона?
- 19. Как сделать общий кортеж -> преобразование класса case в Scala?
- 20. Scala: Как сделать toString() взять неявный параметр?
- 21. Как избежать переопределения функций в общих библиотеках?
- 22. Scala Reflection для обновления класса case val
- 23. scala/akka класса case с признаком
- 24. Методы переопределения атрибутов в scala
- 25. Scala: case class runTime Error
- 26. scala case classes вопросы
- 27. Scala - как избежать закрытия?
- 28. scala playframework json неявное преобразование класса case
- 29. Case Classes In Scala
- 30. Scala Case Class Tupled
Существует аналогичный вопрос по адресу: http://stackoverflow.com/questions/20998866/scala-prevent-mixing-methods –