Erlang记录到元组列表

时间:2012-01-21 00:03:50

标签: erlang records

我正在尝试制定一个将记录转换为元组列表的宏定义。类似的东西:

> Id = #id{id1=1,id2=2,id3=3}.
{id,1,2,3}
> ?record_to_tuplelist(id,Id).
[{id1,1},{id2,2},{id3,3}]

到目前为止,我解决了这个问题:

-define(record_to_tuplelist(Rec,RecRef), [ {X,RecRef#Rec.X} || X <- record_info(fields,Rec) ]).

但它给出了语法错误。如果我将RecRef#Rec.X更改为RecRef#Rec {}它可以工作,但不会返回我想要的内容。这只是一个模糊的语法错误或者这实际上是不可能的吗?

1 个答案:

答案 0 :(得分:7)

不,记录名和字段名都必须是原子。如何(未经测试):

-define(record_to_tuplelist(Rec, Ref), lists:zip(record_info(fields, Rec),tl(tuple_to_list(Ref)))).