:)
我想编写DRY erlang代码,但我遇到了问题。我有这样的记录
-record(person, {firstname, lastname, phones=[], emails=[]}).
我用它来创建一本简单的人名列表。然后我想调用一个函数:
updatePersonsInfo(FName,LName,Phone, Email,[Old = #person{firstname = FName, lastname = LName} | T]) ->
UpdatedPhonesList = #person.phones ++ [Phone],
UpdatedEmailsList = #person.emails ++ [Email],
[Old#person{phones= UpdatedPhonesList, emails = UpdatedEmailsList}] ++ T;
我想调用此功能,但我想只添加一封电子邮件。像这样:
updatePersonsInfo(FName,LName, "",Email,Book);
但后来我收到一个错误:
** exception error: bad argument
in operator ++/2
called as 4 ++ []
所以我想这只是在列表中添加任何内容的问题。当然我可以将这个函数拆分为:updatePersonsEmail和updatePersonsPhone,但这两个函数的逻辑将是相同的,这将使我的代码变得丑陋。
有什么想法吗?我试图使用null原子,或_,甚至[],但没有任何效果。
答案 0 :(得分:1)
#person.phones
不会返回旧手机列表。它只返回'人物'记录中'手机'字段的数量。
这就是为什么erlang抱怨4 ++ []
要获取旧手机列表,您必须使用Old#person.phones