需要某种特征 -> 自我类型注释?
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
. . .
我想要求一个案例 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
. . .