【问题标题】:Datomic enum as key in map将 Datomic 枚举作为 map 中的键
【发布时间】:2014-04-24 08:19:47
【问题描述】:

我有一个包含以下枚举的 datomic 数据库

{:db/id #db/id[:db.part/db]
  :db/ident :demographics/gender
  :db/valueType :db.type/ref
  :db/cardinality :db.cardinality/one
  :db/doc "A person's gender enum reference"
  :db.install/_attribute :db.part/db}

;; :demographics/gender enum values
{:db/id #db/id[:db.part/user]
  :db/ident :demographics.gender/male}

{:db/id #db/id[:db.part/user]
  :db/ident :demographics.gender/female}

{:db/id #db/id[:db.part/user]
  :db/ident :demographics.gender/other}

现在说我愿意:

(d/entity db ...)

并获取包含实体及其属性的惰性映射,包括上面的枚举。我现在想要获取作为查询响应得到的枚举值的字符串表示形式。我的想法是这样做:

(def ^:private gender-map {:demographics.gender/male "Male" 
                           :demographics.gender/female "Female" 
                           :demographics.gender/other "Other"})

然后是这个

(gender-map (lazy-map :demographics/gender))

然而,这并没有奏效。这样做的正确方法是什么?

谢谢

【问题讨论】:

  • 原来我在尝试获取地图中的值时顺序错误。我只需要切换键的位置和(d/entity db ...) 结果,我就得到了一个字符串形式的枚举值(例如“male”)。因此,gender-map 是不必要的。
  • 您应该考虑删除您的问题或接受我的回答。顺便说一句:从您的评论中不清楚关键字到字符串的转换发生在哪里或什么顺序是错误的。

标签: clojure enums datomic


【解决方案1】:

lazy-map 在您的示例中未定义。如果是(d/entity ...)返回的结果,检查是否有一个有效的:demographics/gender入口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2011-07-22
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多