代码如下:
(def entry {:name tempName :num tempNum})
(def tempList '(entry))
(println (get (nth tempList 0) (:name)))
Exception in thread "main" java.lang.IllegalArgumentException: Wrong number of args passed to keyword: :name
在这段代码中,我定义了一个名为 entry 的映射,其中包含一个 :name 和一个 :num,然后我把它放在一个列表中,然后我尝试打印第一个(也是唯一一个)元素的 :name 字段名单。 (或者至少这是我认为我的代码所做的 :o)
在将名称放入列表之前,我可以从条目映射访问名称,但是一旦它进入列表,我就会收到此错误。我应该提供什么参数?
最佳答案
有两个问题。
首先,对于包含要解析的符号的列表(如您的情况下的符号条目),您必须使用 syntax-quote (反引号)而不是常规引号(撇号);所以这一行:
(def tempList '(entry))
应该是:
(def tempList `(entry))
或者只是(使用向量,这在 Clojure 中更惯用也更容易使用):
(def tempList [entry]) ; no quoting needed for vectors
然后,改变这一行
(println (get (nth tempList 0) (:name)))
要么这样:
(println (get (nth tempList 0) :name))
或者这个:
(println (:name (nth tempList 0)))
关于list - 在 Clojure 中访问列表中的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1122112/