首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何传递带有关键字参数的映射

如何传递带有关键字参数的映射
EN

Stack Overflow用户
提问于 2017-05-16 15:31:33
回答 2查看 1.2K关注 0票数 1

我有这样的功能:

代码语言:javascript
复制
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)}}]

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

代码语言:javascript
复制
(let [gen_pdf_args {:tmp tmp_dir
                     :margin {:top 0 :right 0 :bottom 0 :left 0}}] 
        (gen-pdf html-black gen_pdf_args)
)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-16 15:38:37

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

如果您真的想使用您的地图,您可以使用应用和扁平,如(apply gen-pdf html-black (-> gen_pdf_args vec flatten))

票数 3
EN

Stack Overflow用户

发布于 2017-05-16 15:54:03

听起来,您需要类似于keyvals函数的内容:

代码语言:javascript
复制
(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 这里的更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44005705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档