Erlang:获取记录字段值

时间:2018-07-25 13:18:17

标签: erlang field record

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

record_info(字段,RecordName)

谢谢。

2 个答案:

答案 0 :(得分:3)

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

如果您具有以下记录定义:

-record(name, [field, anotherfield]).

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

#name{ field = value1, anotherfield = value2 }.

但是,实际情况是这样的:

{name, value1, value2}.

请注意,字段名称实际上不在这里。

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

[name, value1, value2] = tuple_to_list(Record).

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

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

最后一个代码段直接从jj1bdx中盗取。

答案 1 :(得分:-1)

Record中的

record_info(fields, Record) -> [Field]不能是变量,因为它必须在编译时固定。

如果需要动态处理键值结构中的元素,请使用maps