为什么Phoenix框架中的“params”是地图而不是哈希? 任何人都可以解释内部实现级别的细节。
答案 0 :(得分:5)
注意:最近将地图引入带有EEP 43的Erlang VM.Erlang 17提供了EEP的部分实现,其中仅支持“小地图”。这意味着只有在最多存储几十个密钥时,映射才具有良好的性能特征。为了填补这一空白,Elixir还提供了HashDict模块,该模块使用散列算法来提供支持数十万个具有良好性能的密钥的字典。
地图的一个主要优点是部分模式匹配:
def edit(conn, %{"id" => id} = params)
...
以上内容将匹配包含字符串id
作为键的任何地图。
在OTP 18中,地图的性能有所提升,您可以在https://gist.github.com/BinaryMuse/bb9f2cbf692e6cfa4841看到。 HashDict
可能会deprecated in the future。
在这个答案中有一些关于Elixir数据类型的重要信息:What is the benefit of Keyword Lists?
答案 1 :(得分:1)
Elixir将哈希/ dicts作为核心语言的一部分,Erlang VM不支持哈希。下面的哈希是在地图和关键字列表(配对元组列表)之上实现的。
HashDict在顶级结构上实现,结构在顶部地图上实现。
令人困惑的是,未来版本的elixir哈希/ dicts将被弃用,只有2个数据结构图和地图集。