这不编译:
trait FileSystem {
type P <: Path[this.type]
}
trait Path[S <: FileSystem] { self: fileSystem.P =>
val fileSystem: S
}
自我类型约束如何依赖于该特征中的值成员?
答案 0 :(得分:4)
它不能(并且不确定它意味着什么)。
trait FileSystem {
type P <: Path[this.type]
}
trait Path[S <: FileSystem] { self: S#P =>
val fileSystem: S
}
答案 1 :(得分:1)
嗯,我不会这样做,但你可以;只需将Path
放入 FileSystem
:
trait AnyPath[S <: FileSystem] { self: S#P =>
val fileSystem: S
}
trait FileSystem { thisFileSystem =>
type P <: Path
trait Path extends AnyPath[thisFileSystem.type]{ self: thisFileSystem.P =>
lazy val fileSystem = thisFileSystem
}
}
case object SomeFileSystem extends FileSystem {
type P = ReallyConcretePath
case class ReallyConcretePath() extends Path
}