Clojure,从函数返回参数,然后直接在哈希映射中使用

时间:2015-10-04 19:50:53

标签: clojure

我想从函数返回一个参数列表,并将它们直接放入哈希映射中。我使用向量来包含这些参数,假设只能从Clojure函数返回一个值。因此,在通话的返回部分,我想要去掉矢量。

这是函数成功返回的内容:

[:top-edge {3 [[0 0]]}]

正如你所看到的,如果你剥离了矢量,你会得到一些能够直接放入散列图的东西(因为它有一个键和一个值):

:top-edge {3 [[0 0]]}

我已尝试使用applyflatten,并知道在某些情况下concat可用于剥离最外层的矢量,但仍未找到解决方案。

目前我已离开代码,因此它不会剥离向量,错误消息非常有意义:java.lang.IllegalArgumentException: No value supplied for key: [:top-edge {3 [[0 0]]}]

修改 问题已经回答,但只是为了显示实际的代码以及有效和无效的内容。这确实有效:

(conj {:rep (->Blob rgb pos)} (new-edge-map pos edge-keyword seg-id)) 

,但这不是:

{:rep (->Blob rgb pos) (apply hash-map (new-edge-map pos edge-keyword seg-id))}

我得到的错误是'地图文字必须包含偶数个表格'。

2 个答案:

答案 0 :(得分:1)

您可以使用conj

(conj {} [:top-edge {3 [[0 0]]}])

答案 1 :(得分:0)

来自hash-map的文档:

  

返回带有提供的映射的新哈希映射。如果任何钥匙是
    相等,它们的处理就像重复使用assoc一样。

所以,

(apply hash-map [:top-edge {3 [[0 0]]}])
=> {:top-edge {3 [[0 0]]}}