簡體   English   中英

Clojure變換映射值是要設置的向量

[英]Clojure transform map values which are vectors to set

我是Clojure的新手。 我有一張像

{:title "The Little Schemer"
 :authors [friedman , felleisen]}

我想將其轉換為:

{:title "The Little Schemer"
 :authors #{friedman , felleisen}}

我嘗試過:

(def friedman {:name "Daniel Friedman" :birth-year 1944})
(def felleisen {:name "Matthias Felleisen"})

(defn old-book->new-book [book]
  (set  (:authors book)
        )
  )

(println (old-book->new-book {:title "The Little Schemer"
                              :authors [friedman , felleisen]}))

; => Output: #{{:name Daniel Friedman, :birth-year 1944} {:name Matthias Felleisen}}
; => Expected-Output: #{friedman , felleisen}

在這里, defs friedmanfelleisen被執行,結果被轉換為set。 但是,我希望將函數名稱轉換為set而不是其結果。

首先嘗試println

(println {:title "The Little Schemer"
      :authors [friedman , felleisen]})

輸出將是:

{:title The Little Schemer, :authors [{:name Daniel Friedman, :birth-year 1944} {:name Matthias Felleisen}]}

那么,這里發生了什么? 如您所知,在這種情況下, friedmanfelleisen是變量,因此,如果您打印它們,它們將按值顯示在打印消息中。 例如:

(def a 1)
(println a)

將打印1 ,因為a只是一個變量。

你這里顯示的代碼做什么你想,當你打印它-那么變量的值, friedmanfelleisen的值替代。

處置函數set后,您的autors( (:authors [friedman felleisen]) )向量將轉換為set ,即從輸出中看到的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM