Clojure:如何使用字符串键从地图中获取

Clojure: how to get from a map using a string key

如果我有这样的地图:

(def foo {:bar "foobar"})

并且我已经将密钥 :bar 作为字符串传递给了我(即 ":bar") 我希望能够通过类似

的操作从地图访问值
(get foo (symbol ":bar"))

我认为可行,因为 (symbol ":bar"):bar ... 但它只是 returns nil

如果您需要从字符串“:asd”中创建关键字:asd,您可以这样做:

> (= (read-string ":asd") (keyword (subs ":asd" 1)) :asd)
true

带有 (symbol ":asd") 的代码只是像 :asd 一样打印自己,但实际上是一个符号,而不是关键字。

如果您的字符串确实是“: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"))