Spec-Zone.ru › Pony

Диапазон[необязательный A: (Вещественный[A] val & (I8 val | I16 val | I32 val | I64 val | I128 val | ILong val | ISize val | U8 val | U16 val | U32 val | U64 val | U128 val | ULong val | USize val | F32 val | F64 val))]

[Source]

Создаёт [min, max) с шагом inc для любого типа Number.

// iterating with for-loop
for i in Range(0, 10) do
  env.out.print(i.string())
end

// iterating over Range of U8 with while-loop
let range = Range[U8](5, 100, 5)
while range.has_next() do
  try
    handle_u8(range.next()?)
  end
end

Поддерживает min меньшего, чем max, с отрицательным inc, но только для целых типов со знаком и чисел с плавающей точкой:

var previous = 11
for left in Range[I64](10, -5, -1) do
  if not (left < previous) then
    error
  end
  previous = left
end

Если step не перемещает min к max, или если оно 0, то диапазон считается бесконечным, и итерирование по нему никогда не завершится:

let infinite_range1 = Range(0, 1, 0)
infinite_range1.is_infinite() == true

let infinite_range2 = Range[I8](0, 10, -1)
for _ in infinite_range2 do
  env.out.print("will this ever end?")
  env.err.print("no, never!")
end

При использовании Range с типами с плавающей запятой (F32 и F64) возможны шаги inc < 1.0. Если какой-либо из аргументов содержит NaN, +Inf или -Inf, диапазон считается бесконечным, поскольку операции с любым из них не будут перемещать min к max. Фактические значения, генерируемые таким Range, определяются тем, что определяет IEEE 754 как результат min + inc.

for and_a_half in Range[F64](0.5, 100) do
  handle_half(and_a_half)
end

// this Range will produce 0 at first, then infinitely NaN
let nan: F64 = F64(0) / F64(0)
for what_am_i in Range[F64](0, 1000, nan) do
  wild_guess(what_am_i)
end
class ref Range[optional A: (Real[A] val & (I8 val | I16 val | I32 val | 
    I64 val | I128 val | ILong val | 
    ISize val | U8 val | U16 val | 
    U32 val | U64 val | U128 val | 
    ULong val | USize val | F32 val | 
    F64 val))] is
  Iterator[A] ref

Реализует

  • Итератор[A] ref

Конструкторы

создать

[Source]

new ref create(
  min: A,
  max: A,
  inc: A = 1)
: Range[A] ref^

Параметры

  • min: A
  • max: A
  • inc: A = 1

Возвращает

  • Диапазон[A] ref^

Публичные функции

has_next

[Source]

fun box has_next()
: Bool val

Возвращает

  • Булево val

следующий

[Source]

fun ref next()
: A ?

Возвращает

  • A ?

перемотать

[Source]

fun ref rewind()
: None val

Возвращает

  • None val

является_бесконечным

[Source]

fun box is_infinite()
: Bool val

Возвращает

  • Булево val

© 2016-2020, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/collections-Range

Spec-Zone.ru

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