2017-01-13 9 views
1

Пожалуйста, кто-нибудь, кто работал с ref и vector мог бы помочь мне?Clojure: Работа с вектором и ссылкой

Этот вектор в каждой строке есть (ref {:desc "text" :amount double}):

[#<[email protected]: {:desc "DESC1", :amount 100} 
#<[email protected]: {:desc "DESC2", :amount 200} 
#<[email protected]: {:desc "DESC3",:amount -50}>] 

Можно ли принимать все суммы выше и положить его в новый вектор, как это: [100, 200, -50].

Работа с реквизитами довольно сложная, и я не знаю, как их получить.

+0

Вы пробовали deref? https://clojuredocs.org/clojure.core/deref – jmargolisvt

+0

Да, я это сделал. Его трудно получить доступ к каждому из ссылок, чтобы принять сумму и преобразовать в вектор – junis087678

ответ

1

Вот один из способов сделать это:

user=> (def data [{:desc "DESC1", :amount 100} {:desc "DESC2", :amount 200} {:desc "DESC3",:amount -50}]) 
#'user/data 
user=> (def my-refs (map #(ref %) data)) 
#'user/my-refs 
user=> (vec (map #(-> % deref :amount) my-refs)) 
[100 200 -50] 
+0

Спасибо за ваше время! теперь я могу закончить здесь. – junis087678

+2

'vec' +' map' может быть заменен на 'mapv':' (mapv # (->% deref: amount) my-refs) '.. или вот так:' (mapv (comp: amount deref) my- рефов) ' – leetwinski