4

我试图找出一种将对象添加到矢量图的方法。

(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 个对象。任何帮助都会非常感激

4

2 回答 2

4

Clojure 是一种函数式编程语言,它的所有主要数据结构都是不可变和持久的。这也包括向量。

您的示例需要管理状态。Clojure 为此提供了几个抽象,我认为原子最适合您的用例。

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"}]>
于 2012-06-03T08:51:07.687 回答
3

如果你真的需要改变某些东西,missingfaktor 的答案是正确的,但拥有以下内容会更正常:

(defstruct item :name)
(def itemList (for [i (range 10)] (struct item "test")))

换句话说 - 创建包含内容的对象列表。

于 2012-06-03T12:23:09.157 回答