他の回答が指摘するように、これを達成するには独自のソリューションをロールバックする必要があります。しかしながら、提案された解決法は不完全である。たとえば、レコード項目のデフォルト値は考慮されません。私は、この変換の世話をするために、次のコードスニペットを使用します。
%% @doc returns a "RECSPEC" that can be used by to_rec in order to
%% perform conversions
-define(RECSPEC(R), {R, tuple_to_list(#R{}), record_info(fields, R)}).
%% @doc converts a property list into a record.
-spec to_rec(recspec(), proplist()) -> record().
to_rec({R, [_ | N], Spec}, P) when is_atom(R) and is_list(Spec) ->
list_to_tuple(
[R | lists:foldl(
fun ({K,V}, A) ->
case index_of(K, Spec) of
undefined ->
A;
I ->
{Head, Tail} = lists:split(I, A),
Rest = case Tail of
[_ | M] -> M;
[] -> []
end,
Head ++ [V | Rest]
end
end, N, P)]).
は今、一つは単純に行うことができます。
-record(frob, {foo, bar="bar", baz}).
to_rec(?RECSPEC(frob), [{baz, "baz"}, {foo, "foo"}])
#frob{foo="foo", bar="bar", baz="baz"}
を得た私は少し「ツールボックスにこれを入れます"ライブラリ私はErlangアプリケーションを開発するときに人生を楽にするこれらの小さな"スニペット "を収集するために構築しています:ETBX