Wie die anderen Antworten darauf hinweisen, müssen Sie Ihre eigene Lösung rollen, um dies zu erreichen. Die vorgeschlagenen Lösungen sind jedoch unvollständig. Beispielsweise werden Standardwerte für Datensatzeinträge nicht berücksichtigt. Ich verwende den folgenden Code-Schnipsel der diese Umwandlung zu nehmen:
%% @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)]).
Nun kann man einfach tun:
-record(frob, {foo, bar="bar", baz}).
to_rec(?RECSPEC(frob), [{baz, "baz"}, {foo, "foo"}])
die liefert
#frob{foo="foo", bar="bar", baz="baz"}
ich diese in ein kleines setzen „Toolbox "Bibliothek, die ich baue, um diese kleinen" Schnipsel "zu sammeln, die das Leben bei der Entwicklung von Erlang-Anwendungen erleichtern: ETBX