【问题标题】:What's difference between object-like-map and collection-like-map in clojure?clojure中的object-like-map和collection-like-map有什么区别?
【发布时间】:2019-05-14 07:43:03
【问题描述】:

根据Clojure's code standards,当从地图中选择一个元素时,有一个约定应该先行,键或地图。但是标准根据地图是“类对象地图”还是“类集合地图”来区分。

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

使用集合优先语法从集合中提取值(或 如果集合可能为零,请使用 get)。 (collection-like-map 键) (获取collection-like-map键)

如何定义“object-like-map”和“collection-like-map”,它们有何不同?

【问题讨论】:

标签: clojure


【解决方案1】:

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

(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)

【讨论】:

    【解决方案2】:

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

    (:keyword my-map)
    

    在这种情况下使用get:

    (get my-map keyword)
    

    像地图这样的对象,就像一条记录一样,具有代表属性的键和值,而关键字是专门使用的。

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2016-12-24
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多