10

我对 Clojure 很陌生。我有一个来自数据库的结果映射,它包含关键值,例如:

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

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

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

产品名称可以正常使用:

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

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

谢谢

4

3 回答 3

15

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

于 2012-07-01T15:09:51.020 回答
9

空格不是关键字中的有效字符,您正在尝试做一些几乎肯定会在未来引起痛苦的事情。

请注意,关键字函数不会验证它的输入,所以恐怕@jeff-johnston 是不正确的。

在这里进行冗长的讨论:

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

clojuredocs 在讨论后更新了新的文档字符串,请参见此处:

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

于 2012-07-04T23:04:55.733 回答
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"
于 2017-02-01T22:08:05.410 回答