Spec-Zone.ru › Scala 2.13 Library

Класс scala.util.Try

Компаньон объект Try

sealed abstract класс Try[+T] extends Product with Serializable

Тип Try представляет вычисление, которое может завершиться исключением или возвратить успешно вычисленное значение. Он похож на тип scala.util.Either, но отличается по смыслу.

Экземпляры Try[T], являются либо экземпляром scala.util.Success[T], либо scala.util.Failure[T].

Например, Try можно использовать для выполнения деления на пользовательский ввод без явного обработки исключений в каждом месте, где может произойти исключение.

Пример:

import scala.io.StdIn
import scala.util.{Try, Success, Failure}

def divide: Try[Int] = {
  val dividend = Try(StdIn.readLine("Enter an Int that you'd like to divide:\n").toInt)
  val divisor = Try(StdIn.readLine("Enter an Int that you'd like to divide by:\n").toInt)
  val problem = dividend.flatMap(x => divisor.map(y => x/y))
  problem match {
    case Success(v) =>
      println("Result of " + dividend.get + "/"+ divisor.get +" is: " + v)
      Success(v)
    case Failure(e) =>
      println("You must've divided by zero or entered something that's not an Int. Try again!")
      println("Info from the exception: " + e.getMessage)
      divide
  }
}

Важным свойством Try, показанным в приведённом примере, является его способность к цеплению или объединению операций, перехватывая исключения по пути. Комбинаторы flatMap и map в приведённом примере по существу передают либо успешно завершённое значение, упакованное в тип Success для дальнейшей обработки последующим комбинатором в цепочке, либо исключение, упакованное в тип Failure обычно для простого его передачи дальше по цепочке. Комбинаторы, такие как recover и recoverWith, предназначены для обеспечения некоторого типа поведения по умолчанию в случае ошибки.

Примечание: только некритические исключения перехватываются комбинаторами на Try (см. scala.util.control.NonFatal). Серьёзные системные ошибки, с другой стороны, будут выброшены.

Примечание: все комбинаторы Try перехватывают исключения и возвращают ошибку, если не указано иное в документации.

Try появился в стандартной библиотеке Scala после многолетнего использования в качестве неотъемлемой части стека Twitter.

Источник
Try.scala
С

2.10

Линейные супертипы
java.io.Serializable, Product, Equals, AnyRef, Any
Известные подклассы
Failure, Success

Члены типа

final class WithFilter extends AnyRef

Абстрактные члены значения

abstract def canEqual(that: Any): Boolean

Метод, который должен вызываться из любого хорошо спроектированного метода equals, который можно переопределить в подклассе. См. Programming in Scala, Глава 28 для обсуждения и проектирования.

that

значение, которое проверяется на возможность равенства

возвращает

true, если этот экземпляр может быть равен that, иначе false

Определяющие классы
Equals

abstract def collect[U](pf: PartialFunction[T, U]): Try[U]

abstract def failed: Try[Throwable]

Инвертирует этот Try. Если это Failure, возвращает его исключение, заключенное в Success. Если это Success, возвращает Failure, содержащий UnsupportedOperationException.

abstract def filter(p: (T) => Boolean): Try[T]

abstract def flatMap[U](f: (T) => Try[U]): Try[U]

abstract def flatten[U](implicit ev: <:<[T, Try[U]]): Try[U]

abstract def fold[U](fa: (Throwable) => U, fb: (T) => U): U

Применяет fa, если это Failure, или fb, если это Success. Если fb первоначально применяется и вызывает исключение, то fa применяется с этим исключением.

fa

функция, которая применяется, если это Failure

fb

функция, которая применяется, если это Success

возвращает

результаты применения функции

Пример:
    val result: Try[Int] = Try { string.toInt }
    log(result.fold(
      ex => "Operation failed with " + ex,
      v => "Operation produced value: " + v
    ))

abstract def foreach[U](f: (T) => U): Unit

Применяет заданную функцию f если это Success, иначе возвращает Unit, если это Failure.

Примечание: Если f вызывает исключение, то этот метод может вызвать исключение.

abstract def get: T

abstract def getOrElse[U >: T](default: => U): U

Возвращает значение из этого Success или заданный default аргумент, если это Failure.

Примечание: Это выбросит исключение, если это не успех, а default вызывает исключение.

abstract def isFailure: Boolean

abstract def isSuccess: Boolean

abstract def map[U](f: (T) => U): Try[U]

abstract def orElse[U >: T](default: => Try[U]): Try[U]

abstract def productArity: Int

Размер этого продукта.

возвращает

для продукта A(x1, ..., xk), возвращает k

Определяющие классы
Product

abstract def productElement(n: Int): Any

Элемент с индексом n в этом произведении, нумерация с 0. Другими словами, для произведения A(x1, ..., xk), возвращает x(n+1), где 0 <= n < k.

n

индекс возвращаемого элемента

returns

элемент n элементов после первого элемента

Definition Classes
Product
Исключения

IndexOutOfBoundsException, если индекс n находится вне диапазона (n < 0 || n >= productArity).

abstract def recover[U >: T](pf: PartialFunction[Throwable, U]): Try[U]

Применяет заданную функцию f если текущее значение является Failure, иначе возвращает текущее значение, если текущее значение является Success. Это аналог map для обработки исключений.

abstract def recoverWith[U >: T](pf: PartialFunction[Throwable, Try[U]]): Try[U]

Применяет заданную функцию f если текущее значение является Failure, иначе возвращает текущее значение, если текущее значение является Success. Это аналог flatMap для обработки исключений.

abstract def toEither: Either[Throwable, T]

abstract def toOption: Option[T]

abstract def transform[U](s: (T) => Try[U], f: (Throwable) => Try[U]): Try[U]

Члены-значения конкретного типа

final def !=(arg0: Any): Boolean

Проверка двух объектов на неравенство.

returns

true если !(this == that), в противном случае false.

Definition Classes
AnyRef → Any

final def ##(): Int

Эквивалентно x.hashCode за исключением упакованных числовых типов и null. Для числовых типов возвращает значение хеша, которое соответствует равенству значений: если два экземпляра типа значения сравниваются как true, то ## вернёт одинаковое значение хеша для каждого из них. Для null возвращает хэш-код, где null.hashCode генерирует NullPointerException.

returns

значение хеша, согласованное с ==

Definition Classes
AnyRef → Any

def +(other: String): String

Implicit
Этот член добавлен неявным преобразованием из Try[T] в any2stringadd[Try[T]] с помощью метода any2stringadd в scala.Predef.
Definition Classes
any2stringadd

def ->[B](y: B): (Try[T], B)

Implicit
Этот член добавлен неявным преобразованием из Try[T] в ArrowAssoc[Try[T]] с помощью метода ArrowAssoc в scala.Predef.
Definition Classes
ArrowAssoc
Annotations
@inline()

final def ==(arg0: Any): Boolean

Выражение x == that эквивалентно if (x eq null) that eq null else x.equals(that).

returns

true если объект-получатель эквивалентен аргументу; false в противном случае.

Definition Classes
AnyRef → Any

final def asInstanceOf[T0]: T0

Приведение объекта-получателя к типу T0.

Обратите внимание, что успех приведения во время выполнения зависит от семантики стирания Scala. Поэтому выражение 1.asInstanceOf[String] выбросит ClassCastException во время выполнения, в то время как выражение List(1).asInstanceOf[List[String]] не выбросит. В последнем примере, поскольку аргумент типа стёрт во время компиляции, невозможно проверить, являются ли содержимое списка запрошенного типа.

returns

объект-получатель.

Definition Classes
Any
Исключения

ClassCastException, если объект-получатель не является экземпляром стирания типа T0.

def clone(): AnyRef

Создаёт копию объекта-получателя.

Значение метода clone зависит от платформы.

returns

копию объекта-получателя.

Attributes
protected[java.lang]
Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.CloneNotSupportedException]) @native()
Примечание

не указан в SLS как член AnyRef

def ensuring(cond: (Try[T]) => Boolean, msg: => Any): Try[T]

Implicit
Этот член добавлен неявным преобразованием из Try[T] в Ensuring[Try[T]] с помощью метода Ensuring в scala.Predef.
Definition Classes
Ensuring

def ensuring(cond: (Try[T]) => Boolean): Try[T]

Implicit
Этот член добавлен неявным преобразованием из Try[T] в Ensuring[Try[T]] с помощью метода Ensuring в scala.Predef.
Definition Classes
Ensuring

def ensuring(cond: Boolean, msg: => Any): Try[T]

Неявный
Этот член добавлен неявным преобразованием из Try[T] в Ensuring[Try[T]] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

def ensuring(cond: Boolean): Try[T]

Неявный
Этот член добавлен неявным преобразованием из Try[T] в Ensuring[Try[T]] с помощью метода 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: AnyRef): Boolean

Метод равенства для ссылочных типов. По умолчанию выполняется делегирование в eq.

См. также equals в scala.Any.

возвращает

true если объект получателя эквивалентен аргументу; false в противном случае.

Определяющие классы
AnyRef → Any

def finalize(): Unit

Вызывается сборщиком мусора для объекта получателя, когда больше нет ссылок на объект.

Подробности о том, когда и если вызывается метод finalize, а также взаимодействие finalize с нелокальными возвратами и исключениями зависят от платформы.

Атрибуты
protected[java.lang]
Определяющие классы
AnyRef
Аннотации
@throws(classOf[java.lang.Throwable])
Примечание

не указано SLS в качестве члена AnyRef

def formatted(fmtstr: String): String

Возвращает строку, отформатированную в соответствии с заданной строкой format. Строки форматов такие же, как для String.format (@см java.lang.String.format).

Неявный
Этот член добавлен неявным преобразованием из Try[T] в StringFormat[Try[T]] с помощью метода StringFormat в scala.Predef.
Определяющие классы
StringFormat
Аннотации
@inline()

final def getClass(): Class[_ <: AnyRef]

Возвращает представление класса времени выполнения объекта.

возвращает

объект класса, соответствующий типу времени выполнения получателя.

Определяющие классы
AnyRef → Any
Аннотации
@native()

def hashCode(): Int

Метод hashCode для ссылочных типов. См. hashCode в scala.Any.

возвращает

значение хэш-кода для этого объекта.

Определяющие классы
AnyRef → Any
Аннотации
@native()

final def isInstanceOf[T0]: Boolean

Проверяет, является ли динамический тип объекта-получателя T0.

Обратите внимание, что результат проверки зависит от семантики стирания Scala. Таким образом, выражение 1.isInstanceOf[String] вернет false, в то время как выражение List(1).isInstanceOf[List[String]] вернет true. В последнем примере, поскольку аргумент типа стирается во время компиляции, невозможно проверить, соответствуют ли элементы списка указанному типу.

возвращает

true , если объект-получатель является экземпляром стирания типа T0; false в противном случае.

Классы-определения
Any

final def ne(arg0: AnyRef): Boolean

Эквивалентно !(this eq that).

возвращает

true , если аргумент не является ссылкой на объект-получатель; false в противном случае.

Классы-определения
AnyRef

final def notify(): Unit

Разбуживает один поток, ожидающий монитора объекта-получателя.

Классы-определения
AnyRef
Аннотации
@native()
Примечание

не указано SLS в качестве члена AnyRef

final def notifyAll(): Unit

Разбуживает все потоки, ожидающие монитора объекта-получателя.

Классы-определения
AnyRef
Аннотации
@native()
Примечание

не указано SLS в качестве члена AnyRef

def productElementName(n: Int): String

Имя n-го элемента этого продукта, нумерация с 0. В стандартной реализации пустая строка.

n

индекс имени элемента, который нужно вернуть

возвращает

имя указанного элемента

Классы-определения
Product
Исключения

IndexOutOfBoundsException, если индекс n вне диапазона (n < 0 || n >= productArity).

def productElementNames: Iterator[String]

Итератор по именам всех элементов этого продукта.

Классы-определения
Product

def productIterator: Iterator[Any]

Итератор по всем элементам этого продукта.

возвращает

в стандартной реализации, итератор Iterator[Any]

Классы-определения
Product

def productPrefix: String

Строка, используемая в методах toString производных классов. Реализации могут переопределить этот метод, чтобы добавить префикс строки к результату методов toString.

возвращает

в стандартной реализации, пустая строка

Классы-определения
Product

final def synchronized[T0](arg0: => T0): T0

Классы-определения
AnyRef

def toString(): String

Создаёт строковое представление этого объекта. По умолчанию представление зависит от платформы. На платформе Java это конкатенация имени класса, «@» и хэш-кода объекта в шестнадцатеричном формате.

возвращает

строковое представление объекта.

Классы-определения
AnyRef → Any

final def wait(): Unit

Классы-определения
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long, arg1: Int): Unit

Классы-определения
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long): Unit

Классы-определения
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException]) @native()

final def withFilter(p: (T) => Boolean): WithFilter

Создаёт нестрогий фильтр, который в конечном итоге преобразует это в Failure если предикат не выполняется.

Примечание: в отличие от filter, withFilter не создаёт новую Try. Вместо этого он ограничивает область действия последующих map, flatMap, foreach, и withFilter операций.

Так как Try — это коллекция из одного элемента, это может быть немного избыточно, но это согласуется с withFilter на Option и другими коллекциями.

p

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

returns

объект класса WithFilter, который поддерживает map, flatMap, foreach, и withFilter операции. Все эти операции применяются к тем элементам этой Try, которые удовлетворяют предикату p.

Annotations
@inline()

© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala/util/Try.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API