拿到如果我有一個圖是這樣的:的Clojure:如何從一個地圖使用字符串鍵
(def foo {:bar "foobar"})
而且我已經通過了關鍵:bar
作爲字符串(即":bar"
) 我想能夠從地圖上做一些訪問值一樣
(get foo (symbol ":bar"))
我本以爲這工作,因爲(symbol ":bar")
是:bar
...但它只是返回nil
拿到如果我有一個圖是這樣的:的Clojure:如何從一個地圖使用字符串鍵
(def foo {:bar "foobar"})
而且我已經通過了關鍵:bar
作爲字符串(即":bar"
) 我想能夠從地圖上做一些訪問值一樣
(get foo (symbol ":bar"))
我本以爲這工作,因爲(symbol ":bar")
是:bar
...但它只是返回nil
如果需要從字符串使「:ASD」關鍵字:asd
你做這樣的事情:
> (= (read-string ":asd") (keyword (subs ":asd" 1)) :asd)
true
您與(symbol ":asd")
代碼只打印自己喜歡:asd
,但實際上是一個符號,而不是關鍵字。
謝謝你...感覺有點哈克,但看起來這是唯一的方法。 – stukennedy
這有點怪異,因爲你有字符串'「:asd」'開頭。那串來自哪裏?更可能的是,通過首先生成更合理的字符串輸入,您可以更接近其來源解決此問題。 – amalloy
是的,我最終只是這樣做了......我在存儲之前使用了'(name「:asd」)'所以我可以在字符串上使用'(關鍵字「asd」)'。感謝您的建議。 – stukennedy
如果您的字符串確實是「:bar」,只需做一次替換即可刪除冒號,然後使用keyword
將其轉換爲關鍵字。
(def foo {:bar "foobar"})
(foo (keyword (clojure.string/replace ":bar" #"\:" "")))
=> 「foobar的」
這工作:
((read-string ":bar") {:bar "foobar"})
=> "foobar"
當然還是:
(get {:bar "foobar"} (read-string ":bar"))
應該不就是'(關鍵字 「欄」 )'而不是? – cfrick
好吧,(關鍵字「酒吧」)的作品......但我有'「:酒吧」'在字符串不''酒吧「' – stukennedy