标签字段包含标签唯一 ID。我想显示名字
表单上的标签而不是唯一 ID。
这个怎么样:
-module(a).
-compile(export_all).
-record(expense, {uuid, amount, tags}).
show_action(#expense{uuid=UUID, amount=Amount, tags={A, B, C} }) ->
TagConversions= #{1 => "Joe", 2 => "Tammy", 3 => "Bob"},
A_Conv = maps:get(A, TagConversions, "Nathan"),
B_Conv = maps:get(B, TagConversions, "Nathan"),
C_Conv = maps:get(C, TagConversions, "Nathan"),
io:format("~w, ~w, {~s,~s,~s}~n",
[UUID, Amount, A_Conv, B_Conv, C_Conv]).
go() ->
Expense1 = #expense{uuid=1, amount=10, tags={1,2,3} },
show_action(Expense1).
在外壳中:
12> c(a).
a.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,a}
13> a:go().
1, 10, {Joe,Tammy,Bob}
ok
我想要一个可显示的记录版本。
但是会产生很多重复的记录。
是的,但是在 OOP 中,您是否没有大量的 View 对象,其中包含 Model 对象中的全部或部分数据?
选项 1 使用不同数据格式的相同记录,但我认为
它会破坏接口契约;一个人将无法知道
有哪个版本的记录。
您可以构造记录,为标签ID对应的标签名称留一个空白点,然后在可能的情况下填写标签名称:
-module(a).
-compile(export_all).
-record(tag, {id, name=""}).
-record(expense, {uuid, amount, tags}).
show_action(Expense = #expense{uuid=UUID, amount=Amount, tags={A, B, C} }) ->
TagConversions= #{1 => "Joe", 2 => "Tammy", 3 => "Bob"},
A_Conv = maps:get(A#tag.id, TagConversions, "Nathan"),
B_Conv = maps:get(B#tag.id, TagConversions, "Nathan"),
C_Conv = maps:get(C#tag.id, TagConversions, "Nathan"),
io:format("~w, ~w, {~s,~s,~s}~n",
[UUID, Amount, A_Conv, B_Conv, C_Conv]),
Expense#expense{tags={
A#tag{name=A_Conv},
B#tag{name=B_Conv},
C#tag{name=C_Conv}
}}.
go() ->
Expense1 = #expense{uuid=1, amount=10,
tags={#tag{id=1},
#tag{id=2},
#tag{id=3} }
},
show_action(Expense1).
在外壳中:
5> c(a).
a.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,a}
6> a:go().
1, 10, {Joe,Tammy,Bob}
{expense,1,10,{{tag,1,"Joe"},{tag,2,"Tammy"},{tag,3,"Bob"}}}