Тип данных — некоторая разновидность данных, которую виртуальная машина BEAM обрабатывает принципиально иным способом. То же: data type.
Например, числа можно складывать, а атомы — нет:
1> 1 + 2.
3
2> one + two.
** exception error: an error occurred when evaluating
an arithmetic expression
in operator +/2
called as one + two
По пиду можно отправить сообщение, а по кортежу — нет:
1> Pid = spawn(lists, seq, [5,10]).
<0.83.0>
2> Pid ! privet.
privet
3> {Pid} ! privet.
** exception error: bad argument
in operator !/2
called as {<0.83.0>} ! privet
И так по всем типам данных. Многие (если не большинство) различий скрыты от нас (пользователей виртуальной машины), но они есть.
any() = any() — любой допустимый терм. Синоним — term().arity() = arity() — арность.atom() = atom() — атом.binary() = <<_:_*8>> — бинарник (битовая строка, длина которой делится на 8).bitstring() = <<_:_*1>> — битовая строка.boolean() = true | false — булевы значения (истина или ложь).byte() = 0..255 — байт.char() = 0..1114111 — символ (ASCII или юникод, представленные целым числом).float() = float() — вещественное число.function() = function() — функция.identifier() = pid() | port() | reference() — уникальный идентификатор сущности (пид, порт или ссылка).integer() = integer() — целое число.iodata() = iolist() | binary() — иолист или бинарник.iolist() = maybe_improper_list(byte() | binary() | iolist(), binary() | []) — иолист.list() = [any()] — список, который может содержать термы любого типа.list(ContentType) = [ContentType] — список, который может содержать лишь термы какого-то одного типа.map() = #{any() => any()} — карта.maybe_improper_list() = maybe_improper_list(any(), any()) — список, который не обязательно заканчивается.maybe_improper_list(ContentType, TerminationType) = maybe_improper_list(ContentType, TerminationType) — список, который не обязательно заканчивается и который может содержать лишь элементы определённого типа.mfa() = {module(), atom(), arity()} — МФА, кортеж из трёх элементов, идентификатор Модуль:Функция/Арность.module() = atom() — модуль.neg_integer() = integer() =< -1 — отрицательное целое.nil() = [] — пустой список.no_return() = none() — тип, показывающий, что функция никогда не возвращает значение, то есть всегда заканчивающаяся исключением.
— node() = atom() — нода.non_neg_integer() = integer() >= 0 — не отрицательное число (в т.ч. равное нулю).none() = none() — тип, нужный для no_return(), который и следует использовать.nonempty_binary() = <<_:8, _:_*8>> — бинарник, который содержит какие-то данные (не пустой).nonempty_bitstring() = <<_:1, _:_*1>> — не пустая бинарная строка.nonempty_improper_list(ContentType, TerminationType) = nonempty_improper_list(ContentType, TerminationType) — maybe_improper_list/2, содержащий какие-то элементы (не пустой).nonempty_list() = [any(), ...] — не пустой список.nonempty_list(ContentType) = [ContentType, ...] — не пустой список, который может содержать элементы лишь определённого типа.nonempty_maybe_improper_list() = nonempty_maybe_improper_list(any(), any()) — не пустой maybe_improper_list().nonempty_maybe_improper_list(ContentType, TerminationType) = nonempty_maybe_improper_list(ContentType, TerminationType) — не пустой maybe_improper_list(ContentType, TerminationType).nonempty_string() = [char(), ...] — не пустая строка.number() = integer() | float() — число, целое или вещественное.pid() = pid() — пид.port() = port() — порт.pos_integer() = integer() >= 1 — положительное целое число.reference() = reference() — ссылка.string() = [char()] — строка.term() = any() — любой возможный терм. Синоним: any().timeout() = infinity | integer() >= 0 — значение для таймаута в выражении receive.tuple() = tuple() — кортеж.Data types на официальном сайте.
Copyright © 2024 Алексей Карманов