Трейт scala.collection.generic.IsTraversableLike
Компаньон объект IsTraversableLike
трейт IsTraversableLike[Repr] extends AnyRef
Типы-члены
абстрактный тип A
Абстрактные члены-значения
абстрактный val conversion: (Repr) ⇒ GenTraversableLike[A, Repr]
Члены-значения конкретного типа
final def !=(arg0: Any): Boolean
Проверка двух объектов на неравенство.
- возвращает
trueесли !(this == that), иначе false.
- Определяющие классы
- AnyRef → Any
final def ##(): Int
Эквивалентно x.hashCode за исключением упакованных числовых типов и null. Для чисел возвращается значение хеша, согласованное с равенством значений: если два экземпляра типа значения сравниваются как true, то ## вернёт одно и то же значение хеша для каждого из них. Для null возвращается хешкод, где null.hashCode выбрасывает NullPointerException.
- возвращает
значение хеша, согласованное с ==
- Определяющие классы
- AnyRef → Any
def +(other: String): String
- Неявный
- Этот член добавлен неявным преобразованием из IsTraversableLike[Repr] в any2stringadd[IsTraversableLike[Repr]], выполненным методом any2stringadd в scala.Predef.
- Определяющие классы
- any2stringadd
def ->[B](y: B): (IsTraversableLike[Repr], B)
- Неявный
- Этот член добавлен неявным преобразованием из IsTraversableLike[Repr] в ArrowAssoc[IsTraversableLike[Repr]], выполненным методом ArrowAssoc в scala.Predef.
- Определяющие классы
- ArrowAssoc
- Аннотации
- @inline()
final def ==(arg0: Any): Boolean
Выражение x == that эквивалентно if (x eq null) that eq null else x.equals(that).
- возвращает
trueесли объект-получатель эквивалентен аргументу;falseв противном случае.
- Определяющие классы
- AnyRef → Any
final def asInstanceOf[T0]: T0
Приведение типа объекта-получателя к типу T0.
Обратите внимание, что успех приведения типов во время выполнения определяется семантикой стирания Scala. Поэтому выражение 1.asInstanceOf[String] бросит исключение ClassCastException во время выполнения, тогда как выражение List(1).asInstanceOf[List[String]] этого не сделает. В последнем примере, так как аргумент типа стирается в процессе компиляции, невозможно проверить, соответствуют ли элементы списка запрошенному типу.
- возвращает
объект-получатель.
- Определяющие классы
- Any
- Исключения
ClassCastException, если объект-получатель не является экземпляром стирания типаT0.
def clone(): AnyRef
Создать копию объекта-получателя.
По умолчанию реализация метода clone зависит от платформы.
- возвращает
копию объекта-получателя.
def ensuring(cond: (IsTraversableLike[Repr]) ⇒ Boolean, msg: ⇒ Any): IsTraversableLike[Repr]
- Неявный
- Этот член добавлен неявным преобразованием из IsTraversableLike[Repr] в Ensuring[IsTraversableLike[Repr]], выполненным методом Ensuring в scala.Predef.
- Определяющие классы
- Ensuring
def ensuring(cond: (IsTraversableLike[Repr]) ⇒ Boolean): IsTraversableLike[Repr]
- Неявный
- Этот член добавлен неявным преобразованием из IsTraversableLike[Repr] в Ensuring[IsTraversableLike[Repr]] выполненным методом Ensuring в scala.Predef.
- Классы-определения
- Ensuring
def ensuring(cond: Boolean, msg: ⇒ Any): IsTraversableLike[Repr]
- Неявный
- Этот член добавлен неявным преобразованием из IsTraversableLike[Repr] в Ensuring[IsTraversableLike[Repr]] выполненным методом Ensuring в scala.Predef.
- Классы-определения
- Ensuring
def ensuring(cond: Boolean): IsTraversableLike[Repr]
- Неявный
- Этот член добавлен неявным преобразованием из IsTraversableLike[Repr] в Ensuring[IsTraversableLike[Repr]] выполненным методом Ensuring в scala.Predef.
- Классы-определения
- Ensuring
final def eq(arg0: AnyRef): Boolean
Проверяет, является ли аргумент (that) ссылкой на объект-приёмник (this).
Метод eq реализует отношение эквивалентности на не-нулевых экземплярах AnyRef, и обладает тремя дополнительными свойствами:
-
Он согласован: для любых не-нулевых экземпляров
x и y типа AnyRef, многократные вызовы x.eq(y) последовательно возвращают true или последовательно возвращают false.Для любого не-нулевого экземпляра x типа AnyRef, x.eq(null) и null.eq(x) возвращают false.
null.eq(null) возвращает true.При переопределении методов equals или hashCode важно гарантировать, что их поведение согласуется с равенством ссылок. Поэтому, если два объекта являются ссылками друг на друга (o1 eq o2), они должны быть равны друг другу (o1 == o2) и они должны иметь одинаковое значение хеша (o1.hashCode == o2.hashCode).
- возвращает
trueесли аргумент является ссылкой на объект-приёмник;falseв противном случае.
- Классы-определения
- AnyRef
def equals(arg0: Any): Boolean
Метод равенства для ссылочных типов. По умолчанию делегирует вызов методу eq.
См. также equals в scala.Any.
- возвращает
trueесли объект-приёмник эквивалентен аргументу;falseв противном случае.
- Классы-определения
- AnyRef → Any
def finalize(): Unit
Вызывается сборщиком мусора для объекта-приёмника, когда на объект больше нет ссылок.
Детали вызова метода finalize, а также взаимодействие finalize с нелокальными возвратами и исключениями, зависят от платформы.
- Атрибуты
- protected[lang]
- Классы-определения
- AnyRef
- Аннотации
- @throws( classOf[java.lang.Throwable] )
- Примечание
не указан SLS как член AnyRef
def formatted(fmtstr: String): String
Возвращает строку, отформатированную в соответствии с данной строкой format. Формат строк аналогичен String.format (@см java.lang.String.format).
- Неявный
- Этот член добавлен неявным преобразованием из IsTraversableLike[Repr] в StringFormat[IsTraversableLike[Repr]] выполненным методом StringFormat в scala.Predef.
- Классы-определения
- StringFormat
- Аннотации
- @inline()
final def getClass(): Class[_]
Возвращает представление класса объекта во время выполнения.
- возвращает
объект класса, соответствующий типу времени выполнения приёмника.
def hashCode(): Int
final def isInstanceOf[T0]: Boolean
Проверка, является ли динамический тип объекта-приёмника типом T0.
Обратите внимание, что результат проверки зависит от правил стирания типов Scala. Поэтому выражение 1.isInstanceOf[String] вернёт false, а выражение List(1).isInstanceOf[List[String]] вернёт true. В последнем примере, поскольку аргумент типа стирается во время компиляции, невозможно проверить, соответствуют ли элементы списка заданному типу.
- returns
trueесли объект-приёмник является экземпляром стираемого типаT0;falseв противном случае.
- Definition Classes
- Any
final def ne(arg0: AnyRef): Boolean
Эквивалентно !(this eq that).
- returns
trueесли аргумент не является ссылкой на объект-приёмник;falseв противном случае.
- Definition Classes
- AnyRef
final def notify(): Unit
Разбудит единственную нить, ожидающую монитор объекта-приёмника.
- Definition Classes
- AnyRef
- Annotations
- @native()
- Note
не указано в SLS как член AnyRef
final def notifyAll(): Unit
Разбудит все нити, ожидающие монитор объекта-приёмника.
- Definition Classes
- AnyRef
- Annotations
- @native()
- Note
не указано в SLS как член AnyRef
final def synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
def toString(): String
Создаёт строковое представление этого объекта. По умолчанию представление зависит от платформы. На платформе Java это конкатенация имени класса, «@» и хэш-кода объекта в шестнадцатеричном формате.
- returns
строковое представление объекта.
- Definition Classes
- AnyRef → Any
final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
final def wait(arg0: Long): Unit
def →[B](y: B): (IsTraversableLike[Repr], B)
- Неявный
- Этот член добавлен неявным преобразованием из IsTraversableLike[Repr] в ArrowAssoc[IsTraversableLike[Repr]] при помощи метода ArrowAssoc в scala.Predef.
- Definition Classes
- ArrowAssoc
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.12.9/scala/collection/generic/IsTraversableLike.html
Трейт, который можно использовать для избежания дублирования кода при определении расширяющих методов, которые должны быть применимы как к существующим коллекциям Scala (т.е., типы, расширяющие
GenTraversableLike) , так и к другим (возможно, определённым пользователем) типам, которые можно преобразовать в тип коллекции Scala. Этот трейт позволяет одинаково обрабатывать коллекции Scala и типы, которые могут быть неявным образом преобразованы в тип коллекции. Например, можно предоставить расширяющие методы, которые работают как с типами коллекций, так и сString(Stringне расширяютGenTraversableLike, но могут быть преобразованы вGenTraversableLike)IsTraversableпредоставляет два члена:A, который представляет тип элемента целевойGenTraversableLike[A, Repr]conversion, который предоставляет способ преобразования между типом, к которому мы хотим добавить расширяющие методы,Repr, иGenTraversableLike[A, Repr].Использование
Необходимо предоставить
IsTraversableLikeв качестве неявного параметра типа неявного преобразования. Его использование показано ниже. Наша цель в следующем примере - предоставить общий расширяющий методmapReduceдля любого типа, который расширяет или может быть преобразован вGenTraversableLike. В нашем примере это включаетString.import scala.collection.GenTraversableLike import scala.collection.generic.IsTraversableLike class ExtensionMethods[A, Repr](coll: GenTraversableLike[A, Repr]) { def mapReduce[B](mapper: A => B)(reducer: (B, B) => B): B = { val iter = coll.toIterator var res = mapper(iter.next()) while (iter.hasNext) res = reducer(res, mapper(iter.next())) res } } implicit def withExtensions[Repr](coll: Repr)(implicit traversable: IsTraversableLike[Repr]) = new ExtensionMethods(traversable.conversion(coll)) // See it in action! List(1, 2, 3).mapReduce(_ * 2)(_ + _) // res0: Int = 12 "Yeah, well, you know, that's just, like, your opinion, man.".mapReduce(x => 1)(_ + _) // res1: Int = 59Здесь мы начинаем с создания класса
ExtensionMethods, который содержит наш расширяющий методmapReduce. Обратите внимание, чтоExtensionMethodsпринимает аргумент конструктораcollтипаGenTraversableLike[A, Repr], гдеAпредставляет тип элемента, аReprпредставляет (как правило) тип коллекции. Реализация самогоmapReduceпроста.Интересная часть - неявное преобразование
withExtensions, которое возвращает экземплярExtensionMethods. Это неявное преобразование может быть применено только в том случае, если в области видимости существует неявное значениеtraversableтипаIsTraversableLike[Repr]. ПосколькуIsTraversableLikeпредоставляет значение-членconversion, который дает нам способ преобразования между любым типом, к которому мы хотим добавить расширяющий метод (в данном случае,Repr) иGenTraversableLike[A, Repr], мы теперь можем преобразоватьcollиз типаReprвGenTraversableLike[A, Repr]. Это позволяет нам создать экземпляр классаExtensionMethods, которому мы передаём наш новый методGenTraversableLike[A, Repr].Когда метод
mapReduceвызывается на каком-то типе, который не является его членом, запускается поиск неявных значений. Поскольку неявное преобразованиеwithExtensionsявляется общим, оно будет применяться, пока не будет найдено неявное значение типаIsTraversableLike[Repr]. Учитывая, чтоIsTraversableLikeсодержит неявные члены, которые возвращают значения типаIsTraversableLike, это требование, как правило, выполняется, и запускается цепочка взаимодействий, описанная в предыдущем абзаце. (См. компаньон-объектIsTraversableLike, который содержит точное описание доступных неявных значений.)Примечание: В настоящее время невозможно объединить неявное преобразование и класс с расширяющими методами в неявный класс из-за ограничений вывода типов.
Реализация
IsTraversableLikeдля новых типовНужно просто предоставить неявное значение типа
IsTraversableLike, специфичное для нового типа, или неявное преобразование, которое возвращает экземплярIsTraversableLike, специфичное для нового типа.Ниже приведён пример реализации трейта
IsTraversableLike, где типRepr—String.implicit val stringRepr: IsTraversableLike[String] { type A = Char } = new IsTraversableLike[String] { type A = Char val conversion = implicitly[String => GenTraversableLike[Char, String]] }2.10