Spec-Zone.ru › Nim 1

typeinfo

Этот модуль реализует интерфейс для информации о типах Nim во время выполнения (runtime type information) (RTTI). См. модуль marshal для примера того, что позволяет сделать этот модуль.

Обратите внимание, что, хотя Any и его операции скрывают от клиентов неприятные низкоуровневые детали, он по-прежнему остается небезопасным! Кроме того, информация о типе Nim во время выполнения будет развиваться и, возможно, в конечном итоге будет устаревшим. В качестве альтернативного подхода к программно пониманию и манипулированию типами рассмотрите возможность использования пакета macros для работы с представлением AST типов во время компиляции. См., например, процедуру getTypeImpl proc. В качестве альтернативного подхода к хранению произвольных типов во время выполнения рассмотрите использование дженериков.

Типы

AnyKind = enum
  akNone = 0,               ## invalid any
  akBool = 1,               ## any represents a ``bool``
  akChar = 2,               ## any represents a ``char``
  akEnum = 14,              ## any represents an enum
  akArray = 16,             ## any represents an array
  akObject = 17,            ## any represents an object
  akTuple = 18,             ## any represents a tuple
  akSet = 19,               ## any represents a set
  akRange = 20,             ## any represents a range
  akPtr = 21,               ## any represents a ptr
  akRef = 22,               ## any represents a ref
  akSequence = 24,          ## any represents a sequence
  akProc = 25,              ## any represents a proc
  akPointer = 26,           ## any represents a pointer
  akString = 28,            ## any represents a string
  akCString = 29,           ## any represents a cstring
  akInt = 31,               ## any represents an int
  akInt8 = 32,              ## any represents an int8
  akInt16 = 33,             ## any represents an int16
  akInt32 = 34,             ## any represents an int32
  akInt64 = 35,             ## any represents an int64
  akFloat = 36,             ## any represents a float
  akFloat32 = 37,           ## any represents a float32
  akFloat64 = 38,           ## any represents a float64
  akFloat128 = 39,          ## any represents a float128
  akUInt = 40,              ## any represents an unsigned int
  akUInt8 = 41,             ## any represents an unsigned int8
  akUInt16 = 42,            ## any represents an unsigned in16
  akUInt32 = 43,            ## any represents an unsigned int32
  akUInt64 = 44              ## any represents an unsigned int64
какой тип any Исходный код Редактировать
Any = object
  value: pointer
  when defined(js):
      rawType: PNimType

  else:
      rawTypePtr: pointer
может представлять любое значение Nim; ПРИМЕЧАНИЕ: значение, заключенное в оболочку, может быть изменено его оболочкой! Это означает, что Any хранит неотслеживаемый указатель на оборачиваемое значение, и не должен существовать дольше, чем оборачиваемое значение. Исходный код Редактировать

Процедуры

proc toAny[T](x: var T): Any {...}{.inline.}
Создаёт объект Any из x. Это захватывает адрес x, поэтому x можно изменить с помощью его обертки Any! Клиент должен убедиться, что обертка не живёт дольше, чем x! Исходный код Изменить
proc kind(x: Any): AnyKind {...}{.inline, raises: [], tags: [].}
Получает тип. Исходный код Изменить
proc size(x: Any): int {...}{.inline, raises: [], tags: [].}
Возвращает размер типа x. Исходный код Изменить
proc baseTypeKind(x: Any): AnyKind {...}{.inline, raises: [], tags: [].}
Получает тип базового типа; akNone возвращается, если у x нет базового типа. Исходный код Изменить
proc baseTypeSize(x: Any): int {...}{.inline, raises: [], tags: [].}
Возвращает размер базового типа x. Исходный код Изменить
proc invokeNew(x: Any) {...}{.raises: [], tags: [].}
Выполняет new(x). x должен представлять ref. Исходный код Изменить
proc invokeNewSeq(x: Any; len: int) {...}{.raises: [], tags: [].}
Выполняет newSeq(x, len). x должен представлять seq. Исходный код Изменить
proc extendSeq(x: Any) {...}{.raises: [], tags: [].}
Выполняет setLen(x, x.len+1). x должен представлять seq. Исходный код Изменить
proc setObjectRuntimeType(x: Any) {...}{.raises: [], tags: [].}
Необходимо вызвать для установки поля типа объекта runtime x. Исходный код Изменить
proc `[]`(x: Any; i: int): Any {...}{.raises: [ValueError], tags: [].}
Доступ к любому x, который представляет массив или последовательность. Исходный код Изменить
proc `[]=`(x: Any; i: int; y: Any) {...}{.raises: [ValueError], tags: [].}
Доступ к любому x, который представляет массив или последовательность. Исходный код Изменить
proc len(x: Any): int {...}{.raises: [], tags: [].}
len для любого x, представляющего массив или последовательность. Исходный код Изменить
proc base(x: Any): Any {...}{.raises: [], tags: [].}
Возвращает базовый Any (полезно для типов унаследованных объектов). Исходный код Изменить
proc isNil(x: Any): bool {...}{.raises: [], tags: [].}
isNil для любого x, представляющего cstring, proc или указатель. Исходный код Изменить
proc getPointer(x: Any): pointer {...}{.raises: [], tags: [].}
Извлекает значение указателя из x. x должен быть типа akString, akCString, akProc, akRef, akPtr, akPointer, akSequence. Исходный код Изменить
proc setPointer(x: Any; y: pointer) {...}{.raises: [], tags: [].}
Устанавливает значение указателя для x. x должен быть типа akString, akCString, akProc, akRef, akPtr, akPointer, akSequence. Исходный код Изменить
proc `[]=`(x: Any; fieldName: string; value: Any) {...}{.raises: [ValueError],
    tags: [].}
Устанавливает поле x; x представляет объект или кортеж. Исходный код Изменить
proc `[]`(x: Any; fieldName: string): Any {...}{.raises: [ValueError], tags: [].}
Получает поле x; x представляет объект или кортеж. Исходный код Изменить
proc `[]`(x: Any): Any {...}{.raises: [], tags: [].}
Операция разыменования для любого x, который представляет указатель или ссылку. Исходный код Изменить
proc `[]=`(x, y: Any) {...}{.raises: [], tags: [].}
Операция разыменования для любого x, который представляет указатель или ссылку. Исходный код Изменить
proc getInt(x: Any): int {...}{.raises: [], tags: [].}
Получает целочисленное значение из x. x должен представлять целое число. Исходный код Изменить
proc getInt8(x: Any): int8 {...}{.raises: [], tags: [].}
Получает значение int8 из x. x должен представлять int8. Исходный код Изменить
proc getInt16(x: Any): int16 {...}{.raises: [], tags: [].}
Получает значение int16 из x. x должен представлять int16. Исходный код Изменить
proc getInt32(x: Any): int32 {...}{.raises: [], tags: [].}
Получает значение int32 из x. x должен представлять int32. Исходный код Изменить
proc getInt64(x: Any): int64 {...}{.raises: [], tags: [].}
Получает значение int64 из x. x должен представлять int64. Исходный код Изменить
proc getBiggestInt(x: Any): BiggestInt {...}{.raises: [], tags: [].}
Получает целое значение из x. x должен представлять целое число, bool, char, перечисление или достаточно маленький набор битов. Значение может быть расширено со знаком до BiggestInt. Исходный код Изменить
proc setBiggestInt(x: Any; y: BiggestInt) {...}{.raises: [], tags: [].}
Устанавливает целочисленное значение для x. x должен представлять целое число, bool, char, перечисление или достаточно маленький набор битов. Исходный код Изменить
proc getUInt(x: Any): uint {...}{.raises: [], tags: [].}
Получает значение uint из x, x должно представлять uint. Исходный код Изменить
proc getUInt8(x: Any): uint8 {...}{.raises: [], tags: [].}
Получает значение uint8 из x, x должно представлять uint8. Исходный код Изменить
proc getUInt16(x: Any): uint16 {...}{.raises: [], tags: [].}
Получает значение uint16 из x, x должно представлять uint16. Исходный код Изменить
proc getUInt32(x: Any): uint32 {...}{.raises: [], tags: [].}
Получает значение uint32 из x, x должно представлять uint32. Исходный код Изменить
proc getUInt64(x: Any): uint64 {...}{.raises: [], tags: [].}
Получает значение uint64 из x, x должно представлять uint64. Исходный код Изменить
proc getBiggestUint(x: Any): uint64 {...}{.raises: [], tags: [].}
Извлекает целое беззнаковое значение из x. x должно представлять целое беззнаковое значение. Источник Редактировать
proc setBiggestUint(x: Any; y: uint64) {...}{.raises: [], tags: [].}
Устанавливает беззнаковое целое значение для c. c должно представлять целое беззнаковое значение. Источник Редактировать
proc getChar(x: Any): char {...}{.raises: [], tags: [].}
Извлекает значение char из x. x должно представлять char. Источник Редактировать
proc getBool(x: Any): bool {...}{.raises: [], tags: [].}
Извлекает значение bool из x. x должно представлять bool. Источник Редактировать
proc skipRange(x: Any): Any {...}{.raises: [], tags: [].}
Пропускает информацию о диапазоне для x. Источник Редактировать
proc getEnumOrdinal(x: Any; name: string): int {...}{.raises: [], tags: [].}
Получает порядковый номер поля перечисления из name. x должно представлять перечисление, но используется только для доступа к информации о типе. В случае ошибки возвращается low(int). Источник Редактировать
proc getEnumField(x: Any; ordinalValue: int): string {...}{.raises: [], tags: [].}
Получает имя поля перечисления в виде строки. x должно представлять перечисление, но используется только для доступа к информации о типе. Возвращается имя поля ordinalValue. Источник Редактировать
proc getEnumField(x: Any): string {...}{.raises: [], tags: [].}
Получает имя поля перечисления в виде строки. x должно представлять перечисление. Источник Редактировать
proc getFloat(x: Any): float {...}{.raises: [], tags: [].}
Извлекает значение float из x. x должно представлять float. Источник Редактировать
proc getFloat32(x: Any): float32 {...}{.raises: [], tags: [].}
Извлекает значение float32 из x. x должно представлять float32. Источник Редактировать
proc getFloat64(x: Any): float64 {...}{.raises: [], tags: [].}
Извлекает значение float64 из x. x должно представлять float64. Источник Редактировать
proc getBiggestFloat(x: Any): BiggestFloat {...}{.raises: [], tags: [].}
Извлекает значение float из x. x должно представлять какое-то float. Значение расширено до BiggestFloat. Источник Редактировать
proc setBiggestFloat(x: Any; y: BiggestFloat) {...}{.raises: [], tags: [].}
Устанавливает значение float для x. x должно представлять какое-то float. Источник Редактировать
proc getString(x: Any): string {...}{.raises: [], tags: [].}
Извлекает строковое значение из x. x должно представлять строку. Источник Редактировать
proc setString(x: Any; y: string) {...}{.raises: [], tags: [].}
Устанавливает строковое значение для x. x должно представлять строку. Источник Редактировать
proc getCString(x: Any): cstring {...}{.raises: [], tags: [].}
Извлекает значение cstring из x. x должно представлять cstring. Источник Редактировать
proc assign(x, y: Any) {...}{.raises: [], tags: [].}
Копирует значение y в x. Оператор присваивания для Any этого НЕ делает; он выполняет поверхностную копию! Источник Редактировать
proc inclSetElement(x: Any; elem: int) {...}{.raises: [], tags: [].}
Включает элемент elem в x. x должно представлять набор битов Nim. Источник Редактировать

Итераторы

iterator fields(x: Any): tuple[name: string, any: Any] {...}{.raises: [], tags: [].}
Итерируется по каждому активному полю объекта или кортежа, представленного x. Источник Редактировать
iterator elements(x: Any): int {...}{.raises: [], tags: [].}
Итерируется по каждому элементу x, представляющему набор битов Nim. Источник Редактировать

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

Spec-Zone.ru

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