如何使用关键字参数传递映射

时间:2017-05-16 15:31:34

标签: dictionary clojure parameter-passing

我有这样的功能:

pdfkit-clj.core/gen-pdf
 [html & {:keys [path tmp asset-path stylesheets margin orientation page-size], :or {path (:path defaults), tmp (:tmp defaults), asset-path (:asset-path defaults), margin {}, orientation (:orientation defaults), page-size (:page-size defaults)}}]

现在我试图传递一个带有关键字参数的地图,但不起作用。

(let [gen_pdf_args {:tmp tmp_dir
                     :margin {:top 0 :right 0 :bottom 0 :left 0}}] 
        (gen-pdf html-black gen_pdf_args)
)

此问题类似于将列表转换为参数。

2 个答案:

答案 0 :(得分:2)

使用& {:keys [...]}实际上并不期望您使用地图来调用它。相反,您将其称为(gen-pdf html :tmp tmp_dir :margin {:top 0})

如果您确实想要使用地图,可以使用“应用”和“{1}}”。

答案 1 :(得分:0)

听起来你想要类似keyvals函数的东西:

(keyvals m)
 "For any map m, returns the keys & values of m as a vector,
  suitable for reconstructing via (apply hash-map (keyvals m))."

(keyvals {:a 1 :b 2})
;=> [:b 2 :a 1]
(apply hash-map (keyvals {:a 1 :b 2}))
;=> {:b 2, :a 1}

请注意,你仍然需要像Alejandro那样使用apply。您可以在keyvals here找到更多相关信息。