拿到如果我有一个图是这样的:的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