請考慮case class Foo[A, B <: List[A]](l: B) { ... }
或類似的東西。特別是,A
以及B
需要在Foo
正文的某處可用。基本類型推理
編譯器是否可以自動推斷出A
?例如,Foo(List(1,2,3))
因類型檢查程序推斷A
爲Nothing
而失敗。也許有一種方法可以通過使用類型成員來解決這個問題?
我有說我忽視的東西embarassingly簡單這裏一定感覺;)
編輯:我剛剛發現使用其他類型的參數X
作品不錯,但我的ATM不明白這是爲什麼所以:
scala> case class Bar[A, B[X] <: List[X]](l: B[A])
defined class Bar
scala> Bar(List(1,2,3))
res11: Bar[Int,List] = Bar(List(1, 2, 3))
有人可以請給我解釋一下嗎? 這是一個統一的問題嗎?
編輯2:使用[A, B[X] <: List[X]](l: B[A])
可能會對某些層次結構產生不希望的影響(儘管這並不是什麼大問題)。更有趣的是,我剛跨blog post跌跌撞撞由Josh Suereth隱含表明[A, B <: List[A]](l: B with List[A])
作品一樣好......無需implicits等
您可以將類定義爲case case Foo [A](l:List [A])'嗎?這可能更清楚。 – leedm777 2012-01-05 21:25:32
我明白你的意思,但這不適用於我的情況。 A型和B型都必須彼此分開。 – fotNelton 2012-01-05 21:54:33