当我评估整个文件时,它似乎没有问题。
(ns ShipDataRecord
(:import [java.util.Date]
[org.joda.time.DateTime]
[org.joda.time.Seconds]
[org.joda.time.format.*]
[semsav.RecordSplitter]))
(require '[clojure.data.csv :as csv]
'[clojure.java.io :as io])
(defrecord Record [W1 W2 W3])
(defn read-csv [fname count]
(with-open [file (reader fname)]
(doall (take count (map (comp first csv/read-csv)
(line-seq file))))))
(map #(apply ->Record %) (read-csv "test.csv" 1))
但是,当我逐行评估时,它似乎给我一个问题。
因此在评估文件后,我在REPL中运行了这一行
(:W3 (first Record))
但是它给了我IllegalArgumentException的编译器异常不知道如何从以下创建ISeq:java.lang.Class clojure.lang.RT.seqFrom(RT.java:494)。
我用Google搜索了但似乎无法找到问题。我在另一个问题中问过这个问题,但由于这个词太长,我不得不创建一个新问题
答案 0 :(得分:1)
在(:W3 (first Record))
中,符号Record
代表班级Record
。我想你在上一篇文章中想要从:W3
生成的记录集合的第一条记录中获取(map #...)
字段。所以你需要的是从map
表达式或从存储表达式结果的变量中获取此值:
(:W3 (first (map #(apply ->Record %) (read-csv "1.csv" 1))))
或
(def records (map #(apply ->Record %) (read-csv "1.csv" 1)))
(:W3 (first records))