Можно ли переопределить val
s или def
s в конструкторе подкласса? Я хочу инициализировать (или установить) элементы признака или абстрактные члены класса в конструкторе подкласса как параметры .Scala: Можно ли переопределить val в конструкторе подкласса?
Ниже приведен пример.
trait A { def memberDef: Int => String val memberVal: String } class B( override val memberDef: Int => String, override val memberVal: String) extends A { ... }
Здесь class B
'S memberDef
переопределяет trait A
' s memberDef
и class B
'S memberVal
переопределяет trait A
' s memberVal
.
Когда я скомпилировал это, ошибки не было. Тем не менее, я хочу знать, есть ли какие-либо ошибки в этой реализации, или если есть лучшая реализация.
Это довольно умно. – Vidya
«Я бы использовал это, потому что Мартин Одерский сказал, что если вы используете ранние инициализаторы, вы достигли святого Грааля - Level L3: Дизайнер библиотеки экспертов: http://www.scala-lang.org/old/node/8610« Я », d сказать, что это прямо противоположно его значению. Дизайнер экспертной библиотеки должен понимать _why_ и _when_ использовать эти функции, а не только как их использовать (конечно же, это относится ко всем другим уровням). –
L3 действительно не святой Грааль! Если я смогу провести аналогию с дзюдо, то L3 будет вашим черным поясом. После этого у вас есть несколько dan-классов, олимпийских медалей и т. Д., К которым нужно стремиться. Подождите, пока вы не перейдете к макросам :) –