Erlang-レコード

Erlangにはレコードを作成するための追加機能があります。これらのレコードはフィールドで構成されています。たとえば、2つのフィールドを持つ個人レコードを定義できます。1つはIDで、もう1つは名前フィールドです。Erlangでは、このレコードのさまざまなインスタンスを作成して、さまざまな名前とIDを持つ複数の人を定義できます。

レコードを操作する方法を調べてみましょう。

レコードの作成

レコードは、レコード識別子を使用して作成されます。このレコード識別子では、レコードを構成するさまざまなフィールドを指定します。一般的な構文と例を以下に示します。

構文

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

上記の例は、2つのフィールドを持つレコードの定義を示しています。1つは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]).

出力

上記のプログラムの出力は次のとおりです。

1
“John”

レコードの値の更新

レコード値の更新は、値を特定のフィールドに変更してから、レコードを新しい変数名に割り当てることによって行われます。一般的な構文と例を以下に示します。

構文

#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]).

出力

上記のプログラムの出力は次のとおりです。

1
“Dan”

ネストされたレコード

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と呼ばれる追加のフィールドを持つ従業員レコードを定義します。

出力

上記のプログラムの出力は次のとおりです。

1