我是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
friedman
和felleisen
会被执行,结果会转换为设置。但是,我希望将函数名称转换为set而不是结果。
答案 0 :(得分:1)
首先尝试println
这个:
(println {:title "The Little Schemer"
:authors [friedman , felleisen]})
输出将是:
{:title The Little Schemer, :authors [{:name Daniel Friedman, :birth-year 1944} {:name Matthias Felleisen}]}
那么,这里发生了什么?正如您在此上下文中所知friedman
和felleisen
是变量,因此,如果您打印它们 - 它们将按值显示在打印消息中。例如:
(def a 1)
(println a)
将打印1
,因为a
只是一个变量。
您在此处显示的代码执行您想要的操作以及打印时 - 然后friedman
和felleisen
的变量值替换为值。
在处理函数(:authors [friedman felleisen])
后,您的autors(set
)向量将转换为set
,这是我们从您的输出中看到的。