不能在短手功能定义中使用矢量创建

时间:2017-03-08 12:31:39

标签: clojure

我想在函数内部创建矢量。

(map #([first %]) coll_of_tuples)

这给出了错误

  

ArityException传递给:PersistentVector的args(0)错误的数量   clojure.lang.AFn.throwArity(AFn.java:429)

除了使用list之外的任何解决方法?我正在寻找简短的符号。

4 个答案:

答案 0 :(得分:2)

如果您想要更短版本,可以选择以下几种方法:

(map #(-> [(first %)]) coll)

(map #(do [(first %)]) coll)

(map (juxt first) coll)

答案 1 :(得分:2)

我喜欢彼得在

的评论中的回答
(map #(vector (first %)) coll_of_tuples)

或者替代

(map #(-> % first vector) coll_of_tuples)

或者更多地依靠FP和anon fn less:

(map (comp vector first) coll_of_tuples)

如果您更愿意将其视为从每个序列中提取第一个1长度序列,那么这是一个序列答案:

(map #(take 1 %) coll_of_tuples)

答案 2 :(得分:1)

如果我需要矢量类型,我会按照彼得的建议使用(map #(vector (first %)) coll_of_tuples)。到目前为止,似乎list是最短的符号。

答案 3 :(得分:0)

您也可以使用for,这与map非常相似,只是依次为序列的每个元素指定一个符号名称:

(for [tuple coll_of_tuples] 
  [(first tuple)])

这不像其他一些解决方案那么简单,但在某些情况下,使用tuple而不是%这样的命名符号会很好。