要求某种特质 - >自我类型注释?

时间:2017-02-18 05:31:30

标签: scala self-type

我想要一个案例类来实现至少一个某些特征。

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

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

这不会编译。

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

解决:它与普通类完全一致,即非案例类。我不知道为什么会这样,但我对此很满意。

1 个答案:

答案 0 :(得分:1)

独立案例类(即没有extends或mixins)不能自我输入。

想一想。 case 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
  . . .