ScalaRunTime._toString
принимает аргумент Product
def _toString(x: Product): String =
x.productIterator.mkString(x.productPrefix + "(", ",", ")")
, поэтому попробуйте определить
trait ProductException extends Exception with Product {
override def toString: String = scala.runtime.ScalaRunTime._toString(this)
}
, а затем
case class Foo(msg: String) extends ProductException
Foo("Live long and prosper")
// res1: Foo = Foo(Live long and prosper)
Это работает, потому что классы неявно Product
s, например, определение
case class Foo(msg: String)
расширяется компилятором до чего-то вроде
case class Foo(msg: String) extends Object with Product with Serializable