我见过的大多数书籍或在线资源都使用记录来保持一个过程的状态(可能因为这是多于(?)十年的方式).另一方面,map有效地用于替换stdlib中的元组(例如,supervisor模块中的childspecs).
作为一个例子,我正在通过Learn You Some Erlang的有限状态机章节工作,state记录可以替换为在init/1需要的回调中声明的映射gen_fsm.
.hrl文件使得跟踪错误变得更加困难.此外,它会更有效吗?
我知道一个经过深思熟虑的基准测试可以回答我的问题,但我只用了几个星期就学习了Erlang,而地图 模块相当新,而且还在变化.
更新:感谢我给出了可怕的建议,我更彻底地阅读了地图上的LYSE章节,答案很明确:
使用记录的优点是密钥在编译时是已知的,这带来了优势
- 快速访问特定值(比动态更快)
- 额外的安全(早期崩溃而不是腐败状态)
- 更容易检查类型
这些记录绝对适合进程的内部状态,尽管偶尔会编写更冗长的code_change函数.
另一方面,Erlang用户将使用记录来表示复杂的嵌套键/值数据结构(奇怪地类似于面向对象语言中的对象),这些数据结构经常跨越模块边界,因此地图将有很大帮助.记录是该工作的错误工具.
我已经在“ 学习一些Erlang”网站上添加了有关地图的专门章节:http : //learnyousomeerlang.com/maps
在墨西哥隔离节专门比较映射到记录和类型的字典。从语义上讲,映射比字典更类似于字典,我的建议是在有意义的记录上使用记录(具有O(1)访问权限的已知类型的受限键集),以及要使用字典的地图(键/值对的异构异构集合)。