通过将字符串转换为符号来提取原子中键的值

Jes*_*son 0 clojure clojurescript

我有一个原子:

{:answer1 "yes", :answer2 "no", :answer3 "maybe"}
Run Code Online (Sandbox Code Playgroud)

我希望能够使用变量x来提取值:answerx.

在我的REPL中,当我测试如何附加到字符串然后转换为符号时,这适用:

(symbol (str ":answer" 2))
Run Code Online (Sandbox Code Playgroud)

结果是:answer2.但是,当我尝试在原子中执行此操作时,我得到的结果是nil:

(get @answers-atom (symbol (str ":answer" 2)))
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样吗?

Sam*_*tep 8

你似乎在混淆符号和关键词.例如,在你给你的问题的开始,地图:answer1,:answer2以及:answer3是关键字,但是(symbol (str ":answer" 2))是一个符号.要获取关键字,您需要改为使用该keyword函数:

(def m {:answer1 "yes" :answer2 "no" :answer3 "maybe"})

(get m (symbol (str ":answer" 2))) ;=> nil

(get m (keyword (str "answer" 2))) ;=> "no"
Run Code Online (Sandbox Code Playgroud)