2011-01-30 70 views
2

我正在收集API和返回的操作類型,它可以修改容器的類型和被包含元素的類型,使其非用例表單中的所有標題類似於以下內容:只是另一個canBuildFrom問題

def map [B, That] (f: (A) ⇒ B)(implicit bf: CanBuildFrom[List[A], B, That]):That
顯而易見的是,對於 That(如果 BitSet回退到 Set,如果所包含的項目更改爲 Int以外的其他收集類型)肯定存在'後退'。但是,如何確定物品的類型?我期望返回類型爲 That[B],但事實並非如此。爲什麼?請教育我:-)

回答

3

您已經自己給出了答案:如果您希望在適當的情況下能夠返回BitSet,則需要在返回類型中刪除該類型參數。顯然沒有BitSet[Int]

你需要的所有信息都已經被適當CanBuildFrom implicits具有類型CanBuildFrom[Coll, A, Traversable[A]]的後備定義處理(或任何可能超過Traversable在類型層次結構)。

當然,CanBuildFrom必須是合理的,但我認爲它實際上可以濫用它並返回一個真正奇怪的That。儘管如此,默認值是相當理智的。