clojure中的“对象式地图”和“集合式地图”有什么区别?

时间:2018-12-13 06:15:02

标签: clojure

根据Clojure's code standards,有一种约定,当从映射中选择元素时,应先行使用键或映射。但是这些标准根据地图是“类似对象的地图”还是“类似收藏的地图”进行区分。

  

使用关键字优先语法访问对象的属性:(:property   类似对象的地图)

     

使用集合优先的语法从集合中提取值(或   如果集合可能为nil,请使用get)。 (类似集合的地图关键字)   (获取类似收藏的地图密钥)

一个人如何定义“类对象图”和“类集合图”,它们有何不同?

2 个答案:

答案 0 :(得分:2)

我想说一个类似对象的映射是状态或更高级别数据类型的封装,其中字段的名称,数量和类型是预先确定的。

(def rectangle {:length 7, :width 12, :color "#0000FF"})

在这种情况下,很自然地可以通过关键字(:length rectangle)进行访问。

我对集合类型映射的想法是,它们往往是同质集合,在这些集合中,您既不知道数字,也不知道将要显示哪些键。想象一下一个地图,该地图计算了音乐收藏({:kpop 19, :smooth-jazz 7, :classic-rock 134, ...})中流派的出现

(def genre-count (count-genres "/data/my-song-list"))

然后,至少根据样式指南,使用来获取单词数是很自然的

(genre-count :punk)

超过(:punk genre-count)

答案 1 :(得分:0)

我会说像map这样的集合是键和值的集合,其中键不一定是关键字,因此,使用键作为函数来提取值将不会:

(:keyword my-map)

在这种情况下,请使用get

(get my-map keyword)

地图之类的对象(如记录)具有键和值,这些键和值代表属性,而关键字则专用。