需要某种特征 -> 自我类型注释?

Requiring a certain trait -> Self type annotation?

我想要求一个案例 class 也实现至少一个特定特征。

我想,我可以像这样使用自类型注释:

case class DisqualifiedDate(override val paths: Set[DatePath],
     override val cal: Calendar) extends CalendricDate(paths,cal){

     this: DateError =>

     val stringPrefix = "DisqualifiedDate"
 }

sealed trait DateError
trait Circular extends DateError
trait Contradictory extends DateError
trait Inaccessible extends DateError

然而,使用 mixin 实例化无法编译。所以,当我这样做时:

val date = new DisqualifiedDate(Set(datePath),cal) with Circular

这无法编译。

是我做错了什么还是整个方法有缺陷?

已解决:它与正常 class,即非大小写 class 完美配合。我不确定为什么会这样,但我同意。

一个stand-alone案例class(即没有extends或mixins)不能自己输入。

想一想。 case class 既是 class 定义又是单例实例化。 self-type 引用意味着如果没有指定的 self-type 混合就无法进行实例化。

您要么必须在不自动创建单例的情况下将其设为 class 定义,要么在定义案例 class 时混合所需的特征。

class DisqualifiedDate(override val paths: Set[DatePath],
                       override val cal: Calendar
                      ) extends CalendricDate(paths,cal) {
  this: DateError =>
  . . .

或者...

case class DisqualifiedDate(override val paths: Set[DatePath],
                            override val cal: Calendar
                           ) extends CalendricDate(paths,cal) with DateError {
  this: DateError =>  // now redundant
  . . .