【问题标题】:Extracting Value of Key in Atom by Converting String to Symbol通过将字符串转换为符号来提取Atom中键的值
【发布时间】:2017-03-29 19:07:38
【问题描述】:

我有一个原子:

{:answer1 "yes", :answer2 "no", :answer3 "maybe"}

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

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

(symbol (str ":answer" 2))

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

(get @answers-atom (symbol (str ":answer" 2)))

知道为什么会发生这种情况吗?

【问题讨论】:

  • 旁注:您所说的“原子”实际上是“地图”。您可以将映射存储在原子内部(就像您在这里使用 answers-atom 所做的那样),但它们是完全不同的概念,在这种情况下,您使用原子的事实是无关紧要的。

标签: clojure clojurescript


【解决方案1】:

您似乎混淆了符号和关键字。例如,在您在问题开头给出的地图中,: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"

【讨论】:

  • 嘎!非常感谢。
猜你喜欢
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
相关资源
最近更新 更多