Clojureを使い始めたばかりです。Suart Hallowayの例のように、構造体のリストを格納して取得しようとすると最初に試してみたものが最初です。hereClojure:ファイルからslurping構造体が空白文字列を含んだ文字列属性で失敗する
私は、次のような属性文字列にスペースを入れずに構造体のインスタンスを使用する場合、構造体のハッシュの私の唾/ SLURPは、と正常に動作します:
(struct customer "Apple" "InfiniteLoop")
しかし、私はこれを使用する場合:
(struct customer "Apple" "Infinite Loop 1")
を
私はエラーを取得する:構造体のフィールドの量に応じて
Exception in thread "main" clojure.lang.LispReader$ReaderException: java.lang.ArrayIndexOutOfBoundsException: 7 (test-storing.clj:19)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:2719)
at clojure.lang.Compiler$DefExpr.eval(Compiler.java:298)
at clojure.lang.Compiler.eval(Compiler.java:4537)
at clojure.lang.Compiler.load(Compiler.java:4857)
at clojure.lang.Compiler.loadFile(Compiler.java:4824)
at clojure.main$load_script__5833.invoke(main.clj:206)
at clojure.main$init_opt__5836.invoke(main.clj:211)
at clojure.main$initialize__5846.invoke(main.clj:239)
at clojure.main$null_opt__5868.invoke(main.clj:264)
at clojure.main$legacy_script__5883.invoke(main.clj:295)
at clojure.lang.Var.invoke(Var.java:346)
at clojure.main.legacy_script(main.java:34)
at clojure.lang.Script.main(Script.java:20)
Caused by: clojure.lang.LispReader$ReaderException: java.lang.ArrayIndexOutOfBoundsException: 7
at clojure.lang.LispReader.read(LispReader.java:180)
at clojure.core$read__4168.invoke(core.clj:2083)
at clojure.core$read__4168.invoke(core.clj:2081)
at clojure.core$read__4168.invoke(core.clj:2079)
at clojure.core$read__4168.invoke(core.clj:2077)
at chap_03$load_db__54.invoke(chap_03.clj:71)
at clojure.lang.AFn.applyToHelper(AFn.java:173)
at clojure.lang.AFn.applyTo(AFn.java:164)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:2714)
... 12 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 7
at clojure.lang.PersistentArrayMap$Seq.first(PersistentArrayMap.java:216)
at clojure.lang.APersistentMap.hashCode(APersistentMap.java:101)
at clojure.lang.Util.hash(Util.java:55)
at clojure.lang.PersistentHashMap.entryAt(PersistentHashMap.java:134)
at clojure.lang.PersistentHashMap.containsKey(PersistentHashMap.java:130)
at clojure.lang.APersistentSet.contains(APersistentSet.java:33)
at clojure.lang.PersistentHashSet.cons(PersistentHashSet.java:59)
at clojure.lang.PersistentHashSet.create(PersistentHashSet.java:34)
at clojure.lang.LispReader$SetReader.invoke(LispReader.java:974)
at clojure.lang.LispReader$DispatchReader.invoke(LispReader.java:540)
at clojure.lang.LispReader.read(LispReader.java:145)
... 20 more
、私は可能性がありますまた、エラーの代わりに属性名として文字列の一部を取得するだけです。例えば:私がいることがわかりますつばの出力ファイルから
(defn load-db [filename]
(with-in-str (slurp filename)(read)))
:このような
(defn store-customer-db [customer-db filename]
(spit filename (with-out-str (print customer-db))))
および読取り機能:ループ1
私はこのようなストア機能を使用します文字列に二重引用符を付けることはありませんが、これはスラップの問題です。これに対して正しい解決策は何でしょうか?
マイClojureのバージョンは1.0で、contribのは数週間の古いスナップショットです。
#clojure(irc)で信頼性の高い即時回答が得られる可能性があります。 – alphazero