【发布时间】:2015-03-26 15:37:54
【问题描述】:
在长生不老药中,我们有地图:
> map = %{:a => "one", :b => "two"} # = %{a: "one", b: "two"}
> map.a # = "one"
> map[:a] # = "one"
我们也有关键字列表:
> kl = [a: "one", b: "two"] # = [a: "one", b: "two"]
> kl2 = [{:a, "one"},{:b, "two"}] # = [a: "one", b: "two"]
> kl == kl2 # = true
> kl[:a] # = "one"
> kl.a # = ** (ArgumentError)
为什么两者兼而有之?
语法? 是不是因为关键字列表具有更灵活的语法,允许将它们定义为没有大括号甚至没有括号作为函数调用的最后一个参数?那为什么不给 Maps 这个语法糖呢?
重复键?是因为关键字列表可以有重复键吗?为什么要同时使用 Map 样式访问和重复键?
性能?是因为关键字列表的性能更好吗?那为什么有地图?在通过键查找成员方面,map 不应该比元组列表更高效吗?
JS Array 和 Ruby Hash 的样子?是这样吗?
我了解它们在结构上是不同的数据表示形式。在我看来,elixir 中的关键字列表似乎通过特殊的语法(3 种不同的语法变体)、用例与映射重叠以及不明确的好处使语言复杂化。
使用关键字列表有什么好处?
【问题讨论】:
标签: elixir