Erlang 使用关联列表而不是记录是一个好主意吗?

Erlang 使用关联列表而不是记录是一个好主意吗?,erlang,Erlang,有没有经验丰富的Erlang程序员会推荐超过记录的 一种情况可能是不同机器上的两个(或多个)节点正在交换消息。我们希望能够独立升级每台机器上的软件。某些升级可能涉及将字段添加到正在发送的一条(或多条)消息中。似乎使用一条记录作为消息意味着您必须始终在两台机器上以锁定步骤进行升级,以便额外的字段不会导致接收器忽略该记录。然而,如果您使用了关联列表之类的东西(它仍然有一个“类似记录”的API),那么尚未升级的接收方仍然会成功地接收消息,而只是忽略新字段。我意识到这并不总是理想的行为,但通常是这样。另

有没有经验丰富的Erlang程序员会推荐超过记录的

一种情况可能是不同机器上的两个(或多个)节点正在交换消息。我们希望能够独立升级每台机器上的软件。某些升级可能涉及将字段添加到正在发送的一条(或多条)消息中。似乎使用一条记录作为消息意味着您必须始终在两台机器上以锁定步骤进行升级,以便额外的字段不会导致接收器忽略该记录。然而,如果您使用了关联列表之类的东西(它仍然有一个“类似记录”的API),那么尚未升级的接收方仍然会成功地接收消息,而只是忽略新字段。我意识到这并不总是理想的行为,但通常是这样。另外,假设消息相当小,因此查找时间无关紧要

假设上述内容有一定道理,我还有以下问题:

  • 是否有标准的(或广泛使用的)Alist库?一些琐碎的谷歌搜索没有发现任何东西
  • 是否有其他情况下您会使用关联列表(或类似列表)

注意列表:keysearch/3几乎是“assq”。

对于少量的键,您可以使用列表,也就是您应该使用的更大的键。在这两种情况下,最大的缺点是不能像用于记录一样使用模式匹配。也有速度惩罚,但在大多数情况下是不相关的。

你基本上有三种选择:

  • 使用记录
  • 使用关联列表(PropList)
  • 使用组合
  • 我使用的记录更改的可能性非常低。这样我就得到了模式匹配,并加快了我想要的速度

    我在需要类似哈希表功能的地方使用proplist。我以模式匹配和速度为代价获得了灵活性

    有时我两者都用。带有一个字段的记录,该字段是proplist。这样我就可以在一部分内容上进行模式匹配,并且在需要的地方具有灵活性


    这三种选择都有不同的取舍,所以你基本上只需要评估你的特殊需求并做出选择。可能需要进行一些原型设计和尝试,才能找出哪些权衡是有意义的,哪些功能是您绝对必须具备的。

    +1用于PropList模块。至于dict,我真的还没有太多的需求,但我想那是因为我尽量保持我的道具列表尽可能小。