2012-07-01 7 views
7

私はClojureにはかなり新しいです。私は、データベースからの結果のマップを持って、それは、以下のようなキー値が含まれます。私はマップから値を取得したいが、私はユニークなプロダクトIDの取得に問題が発生しますClojureのキーには、キー名にスペースが含まれています

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

を。

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

製品名は、使用して正常に動作します:

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

私がプロダクトIDフィールドのキーにスペースを処理するかどうかはわかりません。そのキーの値をマップからどのように取得する必要がありますか?

おかげで

答えて

14

てみてください(キーワード「固有の商品ID」)

+0

おかげでジェフ - 働いていました!とても有難い!! – user1494355

7

スペースはないキーワードで有効な文字である、あなたはほぼ確実に、将来的に痛みの原因となります何かをしようとしています。

キーワード機能は入力を検証しないので、@ jeff-johnstonは間違っています。私は恐れています。ここ

長い議論:

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

clojuredocsは見るここでその議論の次の新しいドキュメンテーション文字列で更新されました:ジェフが示すように

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

+0

ああ、知っておきたいことです。 http://dev.clojure.org/jira/browse/CLJ-17は、将来の "任意のシンボルのサポート" *が実装されるかもしれないと示唆していますが、関連するチケットを見つけることができません。 –

0

あなたは(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" 
関連する問題