根據http://www.scala-lang.org/files/archive/spec/2.11/03-types.html#volatile-types,類型在遵守特定條件時是不穩定的。是否有可能產生一種不是那種形式的易失性類型(例如通過註釋)?那裏有什麼可能的選擇?如何使scala類型易於使用
我的用例如下:我想寫一個庫,其中公開類型A
和B
與A <: B
和B
是易失性的。然後,因爲這個庫的用戶,我希望能夠覆蓋A
類型的值與B
類型之一:
trait TraitB {
def doSomething: Unit
}
trait Library {
type A
type B <: A with TraitB
}
object LibraryUser {
val library: Library = ???
trait T {
val x: library.A
}
object U extends T {
val x: library.B = ???
}
}
這失敗,出現錯誤:
error: overriding value x in trait T of type LibraryUser.library.A; value x has a volatile type; cannot override a member with non-volatile type
但是,當我做A
易失性,此成功。目前,我做A
揮發性使它成爲一個抽象類型Abstract
的子類,也只是在執行Any
否則不使用:
trait TraitB {
def doSomething: Unit
}
trait Library2 {
protected type Abstract
type A <: Any with Abstract
type B <: A with TraitB
}
trait Library2ImplementationHelper {
this: Library2 =>
override type Abstract = Any
}
object Library2User {
val library: Library2 = ???
trait T {
val x: library.A
}
object U extends T {
val x: library.B = ???
}
}
這編譯和工作正常,但Abstract
是一點點人爲的,我想知道是否有其他方法。
沒有,這有什麼好做的揮發性註釋,但大約是揮發性類型的斯卡拉(他們沒有任何共同之處,除了他們的名字) –