Erlang-records

提供:Dev Guides
移動先:案内検索

アーラン-レコード

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

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

レコードを作成する

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

構文

record(recordname , {Field1,Field2 ..Fieldn})

パラメーター

  • レコード名-これはレコードに付けられた名前です。
  • Field1、Field2 ..Fieldn -これらは、レコードを構成するさまざまなフィールドのリストです。

戻り値

None

例えば

-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

パラメーター

  • レコード名-これはレコードに付けられた名前です。
  • フィールド名-これは、アクセスする必要があるフィールドの名前です。

戻り値

フィールドに割り当てられた値。

例えば

-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

パラメーター

  • レコード名-これはレコードに付けられた名前です。
  • フィールド名-これは、アクセスする必要があるフィールドの名前です。
  • 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