2011-01-30 9 views
2

私はthroughtコレクションapiし、コンテナのタイプと含まれている要素のタイプを変更することができる操作の戻り値の型は、次のような使用されていない形式のすべてのヘッダーを持っています。ちょっと別のcanBuildFrom質問

def map [B, That] (f: (A) ⇒ B)(implicit bf: CanBuildFrom[List[A], B, That]):That
That(他のコレクションの種類が Int以外に変更された場合は、 BitSetSetに置き換えられた場合のように)のフォールバックが確実に存在することは明らかです。しかし、どのようにしてアイテムのタイプを確認できますか?私は戻り値の型が That[B]になると期待していますが、そうではありません。どうして?

答えて

3

あなたは既にあなた自身で答えを返しました:適切な場合にBitSetを返すには、戻り値の型でその型パラメータを取り除く必要があります。明らかに、BitSet[Int]はありません。

必要なすべての情報は、タイプCanBuildFrom[Coll, A, Traversable[A]](またはタイプ階層のTraversable以上である可能性があります)のフォールバック定義を持つ適切なCanBuildFromインプリシットによって既に処理されています。

もちろん、CanBuildFromは賢明でなければなりませんが、実際にそれを悪用して本当に奇妙なものを返すことは実際に可能だと思いますThat。それにもかかわらず、デフォルトはかなり正気です。

関連する問題