Совпадение шаблона Erlang со списком записей на приеме

Я пытаюсь создать общий прием для части моего приложения, которая требует ждать несколько обновлений в разное время.
Это прототип, который не работает.

receive_info([])->[];
receive_info([RequiredInfo|RestRequiredInfos]) ->
  receive
    RequiredInfo -> [ RequiredInfo | receie_info(RestRequiredInfos)];
  end.

И его называют

[UserInfo, ContextInfo] = receive_info([#userinfo{},#contextinfo{}]),

Итак, я пытаюсь отправить список типов записей, которым он должен соответствовать, и ожидаю, что список записей будет получен.
Не уверен, что это возможно, потому что записи устанавливают свои поля в неопределенное положение, а совпадение по образцу, например, не работает:

Trying to receive {user_info,undefined}
Other clause: instead {user_info,12} received

EDIT:
Поскольку is_record версия, предоставленная @Adam Lindberg, не работала на меня, я следовал тому же пути, и в итоге оказался с ним:

receive_infos([]) -> [];
receive_infos([Rec|Records]) ->
receive
    %% Guard expression that compares first element in record with supplied record tag
    Record when element(1, Record) =:= Rec -> 
        [ Record | receive_infos(Records)]
end.
0
задан Arkaitz Jimenez 5 September 2011 в 14:38
поделиться