Also habe ich eine ziemlich tiefe Hierarchie von Rekord Definitionen bekam:Gibt es eine einfachere Möglichkeit, einen Wert in einem Subsubsub-Datensatzfeld in Erlang zu ändern?
-record(cat, {name = '_', attitude = '_',}).
-record(mat, {color = '_', fabric = '_'}).
-record(packet, {cat = '_', mat = '_'}).
-record(stamped_packet, {packet = '_', timestamp = '_'}).
-record(enchilada, {stamped_packet = '_', snarky_comment = ""}).
Und jetzt habe ich eine Enchilada bekam, und ich möchte ein neues machen, die wie es ist, außer für den Wert eines der Subsubscubrecords. Folgendes habe ich gemacht.
update_attitude(Ench0, NewState)
when is_record(Ench0, enchilada)->
%% Pick the old one apart.
#enchilada{stamped_packet = SP0} = Ench0,
#stamped_packet{packet = PK0} = SP0,
#packet{cat = Tag0} = PK0,
%% Build up the new one.
Tude1 = Tude0#cat{attitude = NewState},
PK1 = PK0#packet{cat = Tude1},
SP1 = SP0#stamped_packet{packet = PK1},
%% Thank God that's over.
Ench0#enchilada{stamped_packet = SP1}.
Gerade darüber nachgedacht ist schmerzhaft. Gibt es einen besseren Weg?