Spec-Zone.ru › Nim

std/enumutils

Source Edit

Импорты

macros, typetraits

Процедуры

func symbolName[T: enum](a: T): string

Возвращает имя символа перечисления.

Использует symbolRank.

Пример:

type B = enum
  b0 = (10, "kb0")
  b1 = "kb1"
  b2
let b = B.low
assert b.symbolName == "b0"
assert $b == "kb0"
static: assert B.high.symbolName == "b2"
type C = enum # HoleyEnum
  c0 = -3
  c1 = 4
  c2 = 20
assert c1.symbolName == "c1"
Source Edit

Итераторы

iterator items[T: HoleyEnum](E: typedesc[T]): T
Итерируется по перечислению со пропусками.

Пример:

type
  A = enum
    a0 = 2
    a1 = 4
    a2
  B[T] = enum
    b0 = 2
    b1 = 4
from std/sequtils import toSeq
assert A.toSeq == [a0, a1, a2]
assert B[float].toSeq == [B[float].b0, B[float].b1]
Source Edit

Макросы

macro genEnumCaseStmt(typ: typedesc; argSym: typed; default: typed;
                      userMin, userMax: static[int];
                      normalizer: static[proc (s: string): string]): untyped
Source Edit

Шаблоны

template symbolRank[T: enum](a: T): int

Возвращает индекс, в котором a перечислен в T.

Стоимость для HoleyEnum зависит от реализации, в настоящее время оптимизирована для малых перечислений, в противном случае составляет O(T.enumLen).

Пример:

type
  A = enum # HoleyEnum
    a0 = -3
    a1 = 10
    a2
    a3 = (20, "f3Alt")
  B = enum # OrdinalEnum
    b0
    b1
    b2
  C = enum # OrdinalEnum
    c0 = 10
    c1
    c2
assert a2.symbolRank == 2
assert b2.symbolRank == 2
assert c2.symbolRank == 2
assert c2.ord == 12
assert a2.ord == 11
var invalid = 7.A
doAssertRaises(IndexDefect): discard invalid.symbolRank
Source Edit

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

Spec-Zone.ru

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