【问题标题】:Clojure map key with spaces in the key nameClojure 映射键,键名中带有空格
【发布时间】:2012-07-02 05:25:18
【问题描述】:

我对 Clojure 还是很陌生。我有一张来自数据库的结果图,其中包含以下键值:

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

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

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

产品名称可以正常使用:

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

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

谢谢

【问题讨论】:

    标签: map clojure


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      在这里进行冗长的讨论:

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

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

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

      【讨论】:

      【解决方案3】:

      您可以使用 Jeff 指出的 (keyword),但我认为,如果您将从数据库查询返回的映射转换为键没有空格的映射,我认为您通常会更好。我发现这个函数对目的很有用:

      (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-09-29
        • 1970-01-01
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        • 2022-07-29
        • 2017-09-13
        • 2019-07-04
        • 1970-01-01
        相关资源
        最近更新 更多