仍在掙扎着使用this.types(單例類型)。假設這樣的場景:定義一種方法,其返回類型是該方法的參數的單例類型
trait Sys[A <: Access] {
def in[T](v: String): AccessPrepare[A]
}
trait AccessPrepare[A <: Access] {
val a: A
def apply[T](fun: a.type => T): T
}
object Ref {
def single[A <: Access, V](v: V)(implicit a: A): Ref[A, V] = ???
}
trait Ref[A, V]
trait Access {
def set(r: Ref[this.type, Int]): Unit
}
下失敗:
def test(sys: Sys[Access]): Unit =
sys.in("v1") { implicit a =>
val r = Ref.single(44)
a.set(r)
}
因爲很顯然r
是Ref[Access, Int]
型的,而不是Ref[a.type, Int]
。我的猜測是,問題是我需要像
def single[A <: Access, V](v: V)(implicit a: A): Ref[a.type, V] = ...
未編譯爲因「非法方法依賴型」行......
任何想法我怎麼能解決這個問題。需求是我沒有明確註釋帶有類型的調用。也就是說,我做了而不是,想要寫出Ref.single[a.type, Int](44)(a)
是爲了便於理解。
編輯
作爲一個澄清,與參考答案「FYI,並關閉這個問題」線程Constraining an operation by matching a type parameter to an argument's path-dependent type - 我想有除了是創建對象的可能性(參考)不使用工廠方法在訪問但在某處以外(例如與new
語句)。因爲系統不能被Access的定義所限制,所以我必須能夠用更多的對象來擴展它。
我又增加了一個問題:http://stackoverflow.com/questions/5575030/driving-a-singleton-type - 我認爲如果我能解決這個問題,這個問題也將因此而得到解決(我希望) – 2011-04-07 01:52:30