Если я создаю a Set
в Scala, использующем Set(1, 2, 3)
Я добираюсь immutable.Set
.
scala> val s = Set(1, 2, 3)
s: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
Q1: Какой Набор - это на самом деле? Разве это - некоторые установленные на хеш? Какова сложность поисков, например?
Q2: Где я могу читать на этом "создающем набор" методе? Я думал, что это было apply
метод, но в документах говорится, что "Этот метод позволяет наборам интерпретироваться как предикаты. Это возвращает true, эквивалентность, этот набор содержит элемент элемента".
Точно так же, если я создаю a List
использование List(1, 2, 3)
, Я добираюсь
scala> val l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)
scala> l.getClass
res13: java.lang.Class[_] = class scala.$colon$colon
Q3: Снова, что я получаю? В этом случае я не могу даже сразу сказать, изменяемо ли это или нет, так как это даже не часть scala.collection
- пакет. Почему это живет в scala
пакет?
Q4: Где в API я могу читать об этом "создающем список" методе?
Q1: В этом конкретном случае вы получаете Set3
, который представляет собой неизменяемый набор ровно из трех аргументов. Предположительно, он использует if-else if-else для проверки включения. Если вы создадите набор из более чем 4 элементов, вы получите неизменный хэш-набор.
Q2: Вам нужно обратить внимание на метод apply
объекта Set, а не на класс. Метод apply
класса Set вызывается, когда вы выполняете someSet (something)
.
Q3: scala. :: - непустой неизменяемый односвязный список (если вы выполните List ()
без аргументов, вы получите Nil
, что неизменяемый пустой список). Он находится в пакете scala
, поскольку считается настолько базовым, что входит в базовый пакет.
Q4: См. Q2.
Просто чтобы добавить к отличному ответу sepp2k на Q3, где он говорит
Он живет в
scala
, потому что это считается настолько простым, что входит в базовый пакет.
Это относится к Scala 2.7
В Scala 2.8 классы коллекций были реорганизованы, и теперь класс ::
живет в scala.collection.immutable
, а name scala. ::
- это псевдоним типа для scala.collection.immutable. ::
.
Welcome to Scala version 2.8.0.RC5 (OpenJDK 64-Bit Server VM, Java 1.6.0_18).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val l = List(1, 2, 3)
l: List[Int] = List(1, 2, 3)
scala> l.getClass
res0: java.lang.Class[_] = class scala.collection.immutable.$colon$colon
scala> scala.::
res1: collection.immutable.::.type = scala.collection.immutable.$colon$colon$@6ce5d622