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