У Erlang есть дополнительное средство для создания записей. Эти записи состоят из полей. Например, вы можете определить личную запись, которая имеет 2 поля, один - это идентификатор, а другой - поле имени. В Erlang вы можете создать различные экземпляры этой записи, чтобы определить нескольких людей с разными именами и идентификаторами.
Давайте рассмотрим, как мы можем работать с записями.
Создание записи
Запись создается с использованием идентификатора записи. В этом идентификаторе записи вы указываете различные поля, составляющие запись. Общий синтаксис и пример приведены ниже.
record(recordname , {Field1,Field2 ..Fieldn})
- recordname - это имя, присвоенное записи.
- Field1, Field2 ..Fieldn - это список различных полей, которые составляют запись.
-module(helloworld).
-export([start/0]).
-record(person, {name = "", id}).
start() ->
P = #person{name="John",id = 1}.
В приведенном выше примере показано определение записи с двумя полями, одна из которых является идентификатором, а другая - именем. Кроме того, запись строится следующим образом:
#recordname {fieldName1 = value1, fieldName2 = value2 .. fieldNameN = valueN}
Где вы назначаете значения соответствующим полям, когда определен экземпляр записи.
Доступ к значению записи
Чтобы получить доступ к полям и значениям конкретной записи, следует использовать следующий синтаксис.
#recordname.Fieldname
- recordname - это имя, присвоенное записи.
- Fieldname - это имя поля , которое должно быть доступно.
-module(helloworld).
-export([start/0]).
-record(person, {name = "", id}).
start() ->
P = #person{name = "John",id = 1},
io:fwrite("~p~n",[P#person.id]),
io:fwrite("~p~n",[P#person.name]).
Обновление значения записи
Обновление значения записи выполняется путем изменения значения в конкретном поле и последующего присвоения записи новому имени переменной. Общий синтаксис и пример приведены ниже.
#recordname.Fieldname = newvalue
- recordname - это имя, присвоенное записи.
- Fieldname - это имя поля , которое должно быть доступно.
- newvalue - это новое значение, которое необходимо присвоить полю.
-module(helloworld).
-export([start/0]).
-record(person, {name = "", id}).
start() ->
P = #person{name = "John",id = 1},
P1 = P#person{name = "Dan"},
io:fwrite("~p~n",[P1#person.id]),
io:fwrite("~p~n",[P1#person.name]).
Вложенные записи
У Erlang также есть возможность иметь вложенные записи. В следующем примере показано, как можно создавать эти вложенные записи.
-module(helloworld).
-export([start/0]).
-record(person, {name = "", address}).
-record(employee, {person, id}).
start() ->
P = #employee{person = #person{name = "John",address = "A"},id = 1},
io:fwrite("~p~n",[P#employee.id]).
В приведенном выше примере необходимо отметить следующее:
- Сначала мы создаем запись человека, которая имеет значения полей имени и адреса.
- Затем мы определяем запись сотрудника, в которой есть лицо как поле и дополнительное поле с именем id.
0 комментариев