Clojure映射键,键名称中包含空格

时间:2012-07-01 14:35:30

标签: map clojure

我对Clojure很新。我有一个数据库结果的地图,它包含关键值,如:

{:Unique Product ID "09876" :ProductName "XYZ"}

我想从地图中检索值,但我在获取唯一商品ID时遇到问题。

ProductID (str ( map-name ":Unique Product ID"))

产品名称使用正常:

ProductName (str ( map-name :ProductName"))

我不确定如何处理产品ID字段键中的空格。我该如何从地图中检索该密钥的值?

由于

3 个答案:

答案 0 :(得分:16)

尝试(关键字“唯一商品ID”)

答案 1 :(得分:7)

空间关键字中的有效字符,您正在尝试做一些几乎肯定会在将来造成痛苦的事情。

请注意,关键字功能不会验证它的输入,所以@ jeff-johnston不正确我害怕。

这里冗长的讨论:

https://groups.google.com/d/topic/clojure/WvXYkvLoQhI/discussion

clojuredocs在讨论之后用新的文档字符串更新了:

http://clojuredocs.org/clojure_core/clojure.core/keyword

答案 2 :(得分:1)

您可以使用(keyword)作为Jeff指示,但我认为如果您将从数据库查询中返回的地图转换为其键没有空格的地图,那么一般会更好。我觉得这个功能对于这个目的很有用:

(defn despace [m] 
  (zipmap (map #(keyword (clojure.string/replace (name %) " " "_")) (keys m))
          (vals m)))

然后使用下划线代替空格:

(:Unique_Product_ID (despace {(keyword "Unique Product ID") "09876" :ProductName "XYZ"}))
#=> "09876"