Я провожу ДНИ, стуча головой по столу, пытаясь понять, почему именованные параметры не входят в расширенный класс.
Я попробовал traits, copy (), как вы его называете - я и компилятор всегда были в ссоре, и когда что-то компилировалось, значения никогда не передавались.
Так, чтобы было ясно, если у вас есть класс
class A(someInt:Int = 0, someString: String ="xyz", someOtherString: String = "zyx")
И вы хотите его расширить:
class B extends A // does NOT compile
class B(someInt: Int, someString: String, someOtherString: String) extends A // compiles but does not work as expected
Вы могли бы подумать, что вызов B таков:
case object X = B(someInt=4, someString="Boo", someOtherString="Who")
На самом деле либо НЕ скомпилируется (к сожалению, это так), либо фактически работает (это НЕ)
Вместо этого вам нужно создать B следующим образом (да, это повторение вышеуказанного ответа, но сначала это не было очевидно, когда Google привел меня сюда ...)
class B(someInt: Int, someString: String, someOtherString: String) extends A(someInt, someString, someOtherString)
и сейчас
case object X = B(someInt=4, someString="Boo", someOtherString="Who")
И СОСТАВЛЯЕТ, И РАБОТАЕТ
Я еще не определил все комбинации и перестановки того, что / когда и где вы можете поместить значения по умолчанию в конструкторе класса B, но я почти уверен, что значения по умолчанию могут быть указаны в определении класса B с "ожидаемым " Результаты.