У меня есть следующая структура:
(defrecord Member [id name salary role])
(defrecord Project [id name duration])
(defrecord ProjectMember [project member])
(def project-member-records (ref ()))
(defn find-project-member-record [parm-proj-id parm-member-id]
(filter #(let [project (.project %)
member (.member %)
proj-id (:id project)
member-id (:id member)]
(and (= proj-id parm-proj-id)
(= member-id parm-member-id))) @project-member-records))
;;Sample func, does not work
(defn remove-project-member-record [proj-id member-id]
(dosync (ref-set project-member-records (remove #(= (:id (.project %)) proj-id) @project-member-records))))
Теперь я хочу удалить элемент из project-member-records
. Например, я хочу удалить элемент по идентификатору проекта и идентификатору участника, например, я нахожу запись в функции find-project-member-record
. Или (и) я хочу удалить элемент, если у меня есть запись, найденная project-member-records
, что-то вроде (remove (find-project-member-record 1 1) project-records) ;pseudo code
Но я не знаю, как я могу это сделать.
(defn remove-project-member-record [proj-id member-id] (dosync (ref-set project-member-records (remove #(= % (first (find-project-member-record proj-id member-id))) @project-member-records))))
Этот код не выдает никаких ошибок, но не удаляет данные из списка. 23.09.2013let
вdosync
, это тоже работает на моей стороне. 23.09.2013