clooj是逐行还是整行评估

时间:2013-01-01 10:03:11

标签: ide clojure

当我评估整个文件时,它似乎没有问题。

(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搜索了但似乎无法找到问题。我在另一个问题中问过这个问题,但由于这个词太长,我不得不创建一个新问题

1 个答案:

答案 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))