list - 在 Clojure 中访问列表中的 map

标签 list map clojure

代码如下:

(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/

相关文章:

clojure - 关闭 repl 中的 *print-namespace-maps*

java - java.util.Collections和java.util.Collection在Java中有什么关系吗?

c# - List<type> 可以有名称吗?有没有办法拥有 "flexible"属性?

java - 一个对象可以持有它自己的对象的数组吗

url - Dart:将 map 转换成查询字符串

perl - 我可以将 Perl 的映射与数组切片一起使用吗?

python - 为什么 Python `Memory Error` 和列表 `append()` 剩余大量 RAM

c++ - 为什么 map 上的 std::for_each 会调用复制构造函数?

clojure - 有没有办法在 lein repl 启动时将方法注入(inject)到 clojure.core 中?

Clojure 文档 : Understanding This Example of the Reduce Function