在长生不老药中,我们有地图:
> 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这种语法糖呢?
重复的密钥?是因为关键字列表可以有重复的关键字吗?为什么要同时使用地图样式和重复键?
性能?是否因为关键字列表的性能更好?那为什么要有地图呢?而且,地图不应该比键元组列表在按键查找成员方面更有表现吗?
JS Array和Ruby Hash一样的外观?是吗
我了解从结构上讲它们是不同的数据表示形式。在我看来,长生不老药中的关键字列表通过特殊的语法(3种不同的语法变体),用例与地图的重叠以及不清楚的好处,使该语言变得复杂。
使用关键字列表有什么好处?