У меня есть некоторые свойства scala с одинаковым самоналожением, объявленным следующим образом.Объявить самостоятельный тип дочернего признака в родительском признаке в scala
trait BookDbModule {
self: DbConfig => // Abstract this to a parent trait
/* ... */
}
trait AuthorDbModule {
self: DbConfig => // Abstract this to a parent trait
/* ... */
}
Я пытаюсь абстрагироваться декларации собственного типа к родительскому признаку таким образом, что каждый из этих признаков не должны определять самостоятельно тип. Я попробовал следующее.
trait DbModule {
self: DbConfig =>
// Some common DbModule methods
}
// !!! Illegal Inheritance, self-type BookDbModule does not conform to DbConfig
trait BookDbModule extends DbModule {
// What needs to be used instead of extends?
/* ... */
}
// !!! Illegal Inheritance, self-type AuthorDbModule does not conform to DbConfig
trait AuthorDbModule extends DbModule {
// What needs to be used instead of extends?
/* ... */
}
Сообщения об ошибках Illegal Inheritance
имеет смысл для меня, как BookDbModule
не распространяется DbConfig
.
Есть ли какой-либо способ в Scala для принудительного использования признаков типа ребенка в родительском признаке?
Обновление: Похоже, вопрос немного запутан.
То, что я хочу добиться, я хочу, чтобы опустить необходимость установить самостоятельный тип для BookDbModule
и AuthorDbModule
путем расширения (или любого другого признака Scala) материнская черта DbModule
, а имеют собственный тип DbConfig
.
Так, в принципе, я ищу способ сделать детей черты (BookDbModule
и AuthorDbModule
) быть продлены только те классы с DbConfig
объявляя собственного типа в родительских DbModule
, но не в этих детских черт.
// This works but is there any way to omit necessity to write
// self: DbConfig =>
trait AuthorDbModule extends DbModule {
self: DbConfig =>
/* ... */
}
Пожалуйста, дайте мне знать, если он все еще запутан.
Спасибо!
Просьба уточнить, чего вы пытаетесь достичь. Сообщения (для меня, по крайней мере) _do_ говорят, что они «навязывают себя типам признаков». –
Привет @RobStarling, я обновил свой вопрос. Взгляни, пожалуйста. Благодаря! – TheKojuEffect
Спасибо за обновление, делает его более ясным –