Spec-Zone.ru › Scala 3.1

Пакет scala.concurrent.duration.scala.concurrent.duration

пакет scala.concurrent.duration

Классы

Исходный код
case class Срок extends Ordered[Срок]

Этот класс хранит срок, полученный с помощью Deadline.now или с помощью синтаксического сахара для работы со временем:

import scala.concurrent.duration._
3.seconds.fromNow

Его основное назначение — управлять повторными попытками достижения чего-либо (например, ожидания условия), предоставляя методы hasTimeLeft и timeLeft. Все продолжительности измеряются по System.nanoTime; это не учитывает изменения системного времени (например, високосные секунды).

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

Исходный код
объект Срок

Компаньон класс

Исходный код
окончательный неявный класс DoubleMult(f: Double) extends AnyVal

Исходный код
объект Duration

Компаньон класс

Исходный код
абстрактный запечатанный класс Продолжительность extends Serializable with Ordered[Продолжительность]

Утилита для работы с продолжительностями java.util.concurrent.TimeUnit.

Этот класс не предназначен для общего представления времени, он оптимизирован для потребностей scala.concurrent.

Основное использование

Примеры:

import scala.concurrent.duration._

val duration = Duration(100, MILLISECONDS)
val duration = Duration(100, "millis")

duration.toNanos
duration < 1.second
duration <= Duration.Inf

Вызов невыразимых преобразований (например, вызов toSeconds для бесконечной продолжительности) приведет к исключению IllegalArgumentException.

Также предоставляются неявные преобразования для Int, Long и Double. Пример использования:

import scala.concurrent.duration._

val duration = 100.millis

Синтаксический сахар, предоставленный неявными преобразованиями, всегда позволяет создавать конечные продолжительности, даже для бесконечных значений Double; используйте Duration.Inf вместо этого.

Также включены экстрактры, парсинг и арифметика:

val d = Duration("1.2 µs")
val Duration(length, unit) = 5 millis
val d2 = d * 2.5
val d3 = d2 + 1.millisecond

Обработка единиц измерения времени

Вычисления, выполняемые с конечными продолжительностями, всегда сохраняют более точную единицу измерения обоих операндов, независимо от того, может ли более грубая единица точно выразить ту же продолжительность. Это означает, что Duration может использоваться как бескомпромиссный контейнер для пары (длина, единица измерения), если он был создан с помощью соответствующих методов и над ним не выполнялась арифметика; в этом случае сложение/вычитание продолжительностей следует производить с осторожностью.

Соответствие семантике Double

Семантика арифметических операций над Duration двойная:

- точное сложение/вычитание с разрешением в наносекунды для конечных продолжительностей, независимо от величины слагаемых - изоморфно java.lang.Double в отношении бесконечных или неопределенных значений

Преобразование между Duration и Double выполняется с помощью Duration.toUnit (с единицей NANOSECONDS) и Duration.fromNanos(Double)

Сортировка

Стандартный порядок соответствует порядку чисел Double, что означает, что Undefined считается больше всех остальных продолжительностей, включая Duration.Inf.

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

Исходный код
трайт DurationConversions

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

Исходный код
объект DurationConversions

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

Компаньон класс

Исходный код
окончательный неявный класс DurationDouble(d: Double) extends AnyVal with DurationConversions

Исходный код
окончательный неявный класс DurationInt(n: Int) extends AnyVal with DurationConversions

Исходный код
окончательный неявный класс DurationLong(n: Long) extends AnyVal with DurationConversions

Исходный код
объект FiniteDuration

Компаньон класс

Исходный код
окончательный класс FiniteDuration(val length: Long, val unit: TimeUnit) extends Продолжительность

Этот класс представляет конечную продолжительность. Операторы сложения и вычитания перегружены, чтобы гарантировать это статически. Диапазон этого класса ограничен +-(2^63-1)ns, which is roughly 292 years.

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

Исходный код
окончательный неявный класс IntMult(i: Int) extends AnyVal

Исходный код
окончательный неявный класс LongMult(i: Long) extends AnyVal

Исходный код
объект fromNow

Этот объект можно использовать в качестве закрывающего токена для объявления срока в какой-то будущий момент времени:

import scala.concurrent.duration._

val deadline = 3 seconds fromNow

Исходный код
объект span

Этот объект можно использовать в качестве закрывающего токена, если вы предпочитаете точечный стиль, но не хотите активировать language.postfixOps:

import scala.concurrent.duration._

val duration = 2 seconds span

Типы

Исходный код
тип TimeUnit = TimeUnit

Конкретные поля

Исходный код
окончательный значение ДНИ: TimeUnit

Исходный код
окончательный значение ЧАСЫ: TimeUnit

Исходный код
окончательный значение МИКРОСЕКУНДЫ: TimeUnit

Исходный код
окончательный значение МИЛЛИСЕКУНДЫ: TimeUnit

Исходный код
окончательный значение МИНУТЫ: TimeUnit

Исходный код
окончательный значение НАНОСЕКУНДЫ: TimeUnit

Исходный код
окончательный значение СЕКУНДЫ: TimeUnit

Неявные преобразования

Источник
final implicit def DoubleMult(f: Double): DoubleMult

Источник
final implicit def DurationDouble(d: Double): DurationDouble

Источник
final implicit def DurationInt(n: Int): DurationInt

Источник
final implicit def DurationLong(n: Long): DurationLong

Источник
final implicit def IntMult(i: Int): IntMult

Источник
final implicit def LongMult(i: Long): LongMult

Источник
implicit def durationToPair(d: Duration): (Long, TimeUnit)

Источник
implicit def pairIntToDuration(p: (Int, TimeUnit)): Duration

Источник
implicit def pairLongToDuration(p: (Long, TimeUnit)): FiniteDuration

© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.1.1/scala/concurrent/duration.html

Spec-Zone.ru

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