просто еще один вопрос можно построить из вопроса - PullRequest
2 голосов
/ 30 января 2011

Я собираюсь через API коллекции и возвращаемый тип операций, которые могут изменять тип контейнера, и тип содержащегося элемента имеют весь заголовок в неиспользуемой форме, подобный следующему:

def map [B, That] (f: (A) ⇒ B)(implicit bf: CanBuildFrom[List[A], B, That]):That
Ясно, чтоесть надежный «откат» к другому типу коллекции с That (как в случае BitSet откат до Set, если содержащийся элемент изменяется на Int).Но как можно быть уверенным в типе предмета?Я ожидаю, что тип возвращаемого значения That[B], но это не так.Зачем?Просветите меня пожалуйста: -)

1 Ответ

3 голосов
/ 30 января 2011

Вы уже дали ответ сами: если вы хотите иметь возможность вернуть BitSet в соответствующих случаях, вам нужно избавиться от этого параметра типа в возвращаемом типе.BitSet[Int], очевидно, не существует.

Вся необходимая информация уже обработана соответствующими CanBuildFrom имплицитами, которые имеют запасное определение типа CanBuildFrom[Coll, A, Traversable[A]] (или что-то большее, чем Traversableв иерархии типов).

Конечно, CanBuildFrom должен быть разумным, но я думаю, что на самом деле можно злоупотребить им и вернуть действительно странный That.Тем не менее, значения по умолчанию довольно нормальные.

...