だから私はレコード定義のかなり深い階層持っている:Erlangのサブサブサブレコードフィールドの値を変更する簡単な方法はありますか?
をそして今、私はエンチラーダを持っている、と私は1つの値を除いてちょうどそれのような だ新しいものを作りたいですサブサブレコードの ここに私がやってきたことがあります。ただ、これについてを考え
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}.
が痛いです。より良い方法がありますか?構造はアーランの最も強力な部分はありませんが、とにかく
update_attitude(E = #enchilada{
stamped_packet = (SP = #stamped_packet{
packet = (P = #packet{
cat = C
})})}, NewState) ->
E#enchilada{
stamped_packet = SP#stamped_packet{
packet = P#packet{
cat = C#cat{
attitude = NewState
}}}}.
: