我正试图想出一种方法来将对象添加到矢量地图。
(defstruct item :name)
(def itemList [])
(defn add-item [db & item]
(into db item))
(defn get-records[]
(doseq [i (range 0 10 1)]
(add-records itemList (struct item "test")
))
在循环结束时,我希望itemList
包含10个对象。任何帮助都非常适合
答案 0 :(得分:4)
Clojure是一种函数式编程语言,它的所有主要数据结构都是不可变的和持久的。这也包括矢量。
您的示例需要管理州。 Clojure为此提供了几个抽象,其中,我认为atoms最适合您的用例。
user=> (defrecord Item [name])
user.Item
user=> (def item-list (atom []))
#'user/item-list
user=> (defn add-item [db i] (swap! db #(conj % i)))
#'user/add-item
user=> (defn put-records []
(doseq [i (range 10)]
(add-item item-list (Item. "test"))))
#'user/put-records
user=> (put-records)
nil
user=> item-list
#<Atom@4204: [#user.Item{:name "test"} #user.Item{:name "test"} #user.Item{:name "test"} #user.Item{:name "test"} #user.Item{:name "test"} #user.Item{:name "test"} #user.Item{:name "test"} #user.Item{:name "test"} #user.Item{:name "test"} #user.Item{:name "test"}]>
答案 1 :(得分:3)
missingfaktor的回答是正确的,如果你真的需要改变某些东西,但是这样做会更为正常:
(defstruct item :name)
(def itemList (for [i (range 10)] (struct item "test")))
换言之,创建包含内容的对象列表。