不向列表添加任何内容

时间:2013-11-24 19:12:38

标签: list null erlang

:)

我想编写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原子,或_,甚至[],但没有任何效果。

1 个答案:

答案 0 :(得分:1)

#person.phones不会返回旧手机列表。它只返回'人物'记录中'手机'字段的数量。 这就是为什么erlang抱怨4 ++ []

的原因

要获取旧手机列表,您必须使用Old#person.phones