IllegalArgumentException Clojure中的键必须是整数错误

时间:2014-01-29 14:03:59

标签: clojure

尝试执行简单的线程宏时出现主题错误。

关键字定义

(def entityType (keyword "name"))
(def entityURI (keyword "uri"))

我有以下'懒惰'序列:

(def m1
    (({:uri "...#OWLClass_82601afd_b43d_43b4_94fe_2836f40009ca", :name "foo"} 
    {:uri "...#OWLClass_8c6759f0_a165_4a09_a9d8_2603bb106fc6", :name "bar"}))

这是REPL主题:

(->> (first m1)
     (map (fn [rec] (rec entityType))))

结果错误:

IllegalArgumentException Key must be integer  clojure.lang.APersistentVector.invoke (APersistentVector.java:265)

任何有见识的人?

2 个答案:

答案 0 :(得分:3)

根据您的代码,我猜测您希望m1被声明为:

(def m1
  (list (list {:uri "...#OWLClass_82601afd_b43d_43b4_94fe_2836f40009ca", :name "foo"} 
              {:uri "...#OWLClass_8c6759f0_a165_4a09_a9d8_2603bb106fc6", :name "bar"})))

因此:

(->> (first m1)
     (map (fn [rec] (rec entityType))))
;=> ("foo" "bar")

这是你追求的吗?

修改

根据你的评论,我明白m1的结构更平坦,就像这样:

(def m1
  (list {:uri "...#OWLClass_82601afd_b43d_43b4_94fe_2836f40009ca", :name "foo"} 
        {:uri "...#OWLClass_8c6759f0_a165_4a09_a9d8_2603bb106fc6", :name "bar"}))

根据此情况,您只需执行(map (fn [rec] (rec entityType)) m1)并删除->>

答案 1 :(得分:0)

对于那些在搜索了此错误字符串后最终看完这篇文章的人,请当心,不要误将a(关键字...)关联到向量:'

  

(def foo [])

     

(assoc-in foo [:aaa(关键字“ b-bb”)] [“ obj”])