2012-01-21 70 views
2

我想解決一個宏定義,將一個記錄變成一個元組列表。喜歡的東西:Erlang記錄到元組列表

> 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 {},它會工作,但不會返回我想要的。這只是一個模糊的語法錯誤,或者這實際上是不可能的?

+0

你應該學會如何[搜索](http://stackoverflow.com/questions/873532/how-do-i-turn-a-list-of-tuple -pairs-into-a-record-in-erlang) – danechkin

+3

這是一個元組對列表成一條記錄,我想做相反的事情。那個答案就是我獲得當前嘗試的基礎。你應該學會不要敵視,特別是當你錯了時。 –

回答

6

不,記錄名稱和字段名稱都必須是原子。如何像(未經測試):

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

工作,謝謝:) –