Spec-Zone.ru › Nim 1

Итераторы

Итераторы

iterator items[T: not char](a: openArray[T]): lent2 T {...}{.inline.}
Перебирает каждый элемент a. Исходный код Изменить
iterator items[T: char](a: openArray[T]): T {...}{.inline.}
Перебирает каждый элемент a. Исходный код Изменить
iterator mitems[T](a: var openArray[T]): var T {...}{.inline.}
Перебирает каждый элемент a, позволяя вам изменить возвращаемое значение. Исходный код Изменить
iterator items[IX, T](a: array[IX, T]): T {...}{.inline.}
Перебирает каждый элемент a. Исходный код Изменить
iterator mitems[IX, T](a: var array[IX, T]): var T {...}{.inline.}
Перебирает каждый элемент a, позволяя вам изменить возвращаемое значение. Исходный код Изменить
iterator items[T](a: set[T]): T {...}{.inline.}
Перебирает каждый элемент a. items перебирает только элементы, которые реально присутствуют в множестве (а не те, которые множество способно содержать). Исходный код Изменить
iterator items(a: cstring): char {...}{.inline, raises: [], tags: [].}
Перебирает каждый элемент a. Исходный код Изменить
iterator mitems(a: var cstring): var char {...}{.inline, raises: [], tags: [].}
Перебирает каждый элемент a, позволяя вам изменить возвращаемое значение. Исходный код Изменить
iterator items(E: typedesc[enum]): E:type
Перебирает значения перечисления E. Исходный код Изменить
iterator items[T](s: HSlice[T, T]): T
Перебирает срез s, возвращая каждое значение между s.a и s.b (включительно). Исходный код Изменить
iterator pairs[T](a: openArray[T]): tuple[key: int, val: T] {...}{.inline.}
Перебирает каждый элемент a. Возвращает (index, a[index]) пары. Исходный код Изменить
iterator mpairs[T](a: var openArray[T]): tuple[key: int, val: var T] {...}{.inline.}
Перебирает каждый элемент a. Возвращает (index, a[index]) пары. a[index] может быть изменён. Исходный код Изменить
iterator pairs[IX, T](a: array[IX, T]): tuple[key: IX, val: T] {...}{.inline.}
Перебирает каждый элемент a. Возвращает (index, a[index]) пары. Исходный код Изменить
iterator mpairs[IX, T](a: var array[IX, T]): tuple[key: IX, val: var T] {...}{.inline.}
Перебирает каждый элемент a. Возвращает (index, a[index]) пары. a[index] может быть изменён. Исходный код Изменить
iterator pairs[T](a: seq[T]): tuple[key: int, val: T] {...}{.inline.}
Перебирает каждый элемент a. Возвращает (index, a[index]) пары. Исходный код Изменить
iterator mpairs[T](a: var seq[T]): tuple[key: int, val: var T] {...}{.inline.}
Перебирает каждый элемент a. Возвращает (index, a[index]) пары. a[index] может быть изменён. Исходный код Изменить
iterator pairs(a: string): tuple[key: int, val: char] {...}{.inline, raises: [],
    tags: [].}
Перебирает каждый элемент a. Возвращает (index, a[index]) пары. Исходный код Изменить
iterator mpairs(a: var string): tuple[key: int, val: var char] {...}{.inline,
    raises: [], tags: [].}
Перебирает каждый элемент a. Возвращает (index, a[index]) пары. a[index] может быть изменён. Исходный код Изменить
iterator pairs(a: cstring): tuple[key: int, val: char] {...}{.inline, raises: [],
    tags: [].}
Перебирает каждый элемент a. Возвращает (index, a[index]) пары. Исходный код Изменить
iterator mpairs(a: var cstring): tuple[key: int, val: var char] {...}{.inline,
    raises: [], tags: [].}
Перебирает каждый элемент a. Возвращает (index, a[index]) пары. a[index] может быть изменён. Исходный код Изменить
iterator items[T](a: seq[T]): lent2 T {...}{.inline.}
Перебирает каждый элемент a. Исходный код Изменить
iterator mitems[T](a: var seq[T]): var T {...}{.inline.}
Перебирает каждый элемент a, позволяя вам изменить возвращаемое значение. Исходный код Изменить
iterator items(a: string): char {...}{.inline, raises: [], tags: [].}
Перебирает каждый элемент a. Исходный код Изменить
iterator mitems(a: var string): var char {...}{.inline, raises: [], tags: [].}
Перебирает каждый элемент a, позволяя вам изменить возвращаемое значение. Исходный код Изменить
iterator fields[T: tuple | object](x: T): RootObj {...}{.magic: "Fields",
    noSideEffect.}

Перебирает каждое поле x.

Предупреждение: Это фактически преобразует цикл 'for' и раскручивает цикл. Текущая реализация также содержит ошибку, влияющую на привязку символов в теле цикла.

Пример:

var t = (1, "foo")
for v in fields(t): v = default(type(v))
doAssert t == (0, "")
Исходный код Изменить
iterator fields[S: tuple | object; T: tuple | object](x: S; y: T): tuple[
    key: string, val: RootObj] {...}{.magic: "Fields", noSideEffect.}

Перебирает каждое поле x и y.

Предупреждение: Это фактически преобразует цикл 'for' и раскручивает цикл. Текущая реализация также содержит ошибку, влияющую на привязку символов в теле цикла.

Пример:

var t1 = (1, "foo")
var t2 = default(type(t1))
for v1, v2 in fields(t1, t2): v2 = v1
doAssert t1 == t2
Исходный код Изменить
iterator fieldPairs[T: tuple | object](x: T): tuple[key: string, val: RootObj] {...}{.
    magic: "FieldPairs", noSideEffect.}

Перебирает каждое поле x, возвращая его имя и значение.

При переборе объектов с различными типами полей необходимо использовать when времени компиляции вместо if времени выполнения для выбора кода, который необходимо выполнить для каждого типа. Для сравнения используйте оператор is. Другой способ сделать это без when - это возложить задачу выбора подходящего кода на вторичную процедуру, которую вы перегружаете для каждого типа поля и передаёте value в неё.

Предупреждение: Это фактически преобразует цикл 'for' и раскручивает цикл. Текущая реализация также содержит ошибку, влияющую на привязку символов в теле цикла.

Пример:

type
  Custom = object
    foo: string
    bar: bool
proc `$`(x: Custom): string =
  result = "Custom:"
  for name, value in x.fieldPairs:
    when value is bool:
      result.add("\n\t" & name & " is " & $value)
    else:
      result.add("\n\t" & name & " '" & value & "'")
Исходный код Изменить
iterator fieldPairs[S: tuple | object; T: tuple | object](x: S; y: T): tuple[
    key: string, a, b: RootObj] {...}{.magic: "FieldPairs", noSideEffect.}

Перебирает каждое поле x и y.

Предупреждение: Это фактически преобразует цикл 'for' и раскручивает цикл. Текущая реализация также содержит ошибку, влияющую на привязку символов в теле цикла.

Пример:

type Foo = object
  x1: int
  x2: string
var a1 = Foo(x1: 12, x2: "abc")
var a2: Foo
for name, v1, v2 in fieldPairs(a1, a2):
  when name == "x2": v2 = v1
doAssert a2 == Foo(x1: 0, x2: "abc")
Исходный код Изменить

© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/iterators.html

Spec-Zone.ru

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