Unetway

Erlang - Records

У 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.