Erlang:获取记录字段值

Rui*_*tta 3 erlang field record

我想知道 Erlang 中是否有一个内部函数,类似于下面发布的函数,它会给我记录字段值而不是记录字段名称。

record_info(fields, RecordName).
Run Code Online (Sandbox Code Playgroud)

dva*_*ler 5

Erlang 中的记录实际上是一个元组,它的第一个元素是记录的名称。编译完成后,记录将被视为一个元组。

如果您有此记录定义:

-record(name, [field, anotherfield]).
Run Code Online (Sandbox Code Playgroud)

然后您可以定义该记录类型的值,如下所示:

#name{ field = value1, anotherfield = value2 }.
Run Code Online (Sandbox Code Playgroud)

然而,在幕后的实际表示是这样的:

{name, value1, value2}.
Run Code Online (Sandbox Code Playgroud)

请注意,此处的字段名称实际上已消失。

现在,如果您想要记录中每个字段的值列表,您可以使用tuple_to_list

[name, value1, value2] = tuple_to_list(Record).
Run Code Online (Sandbox Code Playgroud)

因此,正如 jj1bdx 指出的那样,如果您想要;所有值的分隔字符串,您可以执行以下操作:

string:join([lists:flatten(io_lib:format("~p", [T])) || T <- tl(tuple_to_list(Record))], ";").
Run Code Online (Sandbox Code Playgroud)

最后一个代码片段是直接从 jj1bdx 窃取的。