2011-02-09 1 views
3

Оба существует, например, здесь:Почему некоторые классы классов имеют «пустой» метод экземпляра дополнительно к методу класса?

Map.empty[Int, Int] 
Map(1 -> 41).empty 

Set().empty 
Set.empty 

Но вот только методы класса существуют:

List.empty  //OK 
List(1,2,3).empty //Doesn't exist 

Array.empty  //OK 
Array("a").empty //Doesn't exist 

Не empty идеальный случай для метода класса (и не должен метод экземпляра empty устаревший поэтому)?

Или должен быть добавлен метод экземпляра empty к классам, которые отсутствуют?

Есть ли что-либо с точки зрения языка, что затрудняет получение только empty в качестве метода класса (например, вывод типа, типы более высокого уровня, ...).

PS: Было предложено Карты со значениями по умолчанию будет труднее достичь без метода экземпляра empty:

Map[Int, Int](1->2, 21->42).withDefault(_*2).empty 

Что вы думаете?

+1

Я думаю, что метод 'empty' на экземплярах является артефактом из pre-canBuildFrom-эпохи. – Landei

ответ

2

Это правда, empty может быть методом экземпляра класса. Причина, почему это требуется наборами и картами, заключается в том, что они реализуют свои строители с помощью этого метода. Я предполагаю, что причина, почему она не была включена в другое место, состоит в том, что это не типичный вариант использования.

0

есть только неизменный список. Существует только один экземпляр EmptyList, поэтому пустой уровень класса не имеет смысла.

Характеристика карты может быть реализована с помощью mutables, поэтому вам нужно несколько экземпляров.

... Я думаю, что с этим объяснением что-то не хватает, но, возможно, это начало.

+0

Почему это не имеет смысла? Нет требования, чтобы «List.empty» возвращал новые экземпляры. Почему не следует возвращать 'Nil' из List.empty? – soc

1

Интересно, почему Map имеет empty, а не наоборот. В конце концов, это не операция, которую вы делаете с чем-то, это всего лишь пример чего-то.

В любом случае:

(List(1, 2, 3): Traversable[Int]).companion.empty 

Я положил в Traversable там просто, чтобы показать это работает для любой коллекции.

Смежные вопросы