Я пытаюсь создать общий прием для части моего приложения, которая требует ждать несколько обновлений в разное время.
Это прототип, который не работает.
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.