1

确保 var 是向量的“最简单”/最短的方法是什么?自写它可能看起来像

(defn ensure-vector [x]
  (if (vector? x)
    x
    (vector x))

(ensure-vector {:foo "bar"})
;=> [{:foo "bar"}]

但我想知道是否已经有一个核心功能可以做到这一点?其中许多(seq, vec, vector, list)要么在地图上失败,要么总是适用。

我也想知道这个函数的最佳名称是什么。box, singleton, unit, v, cast-vector, to-vector, ->vector, !vector, vector!, vec!?

我进一步想知道其他语言,比如 Haskell,是否内置了这个功能。

4

1 回答 1

2

我认为当值是集合时要使用的函数是vec将任何集合转换为向量。该vector函数接收结果向量的项目作为其参数,因此您可以在值既不是向量也不是集合时使用它。

这是一种可能的方法:

(defn as-vector [x]
  (cond
    (vector? x) x
    (sequential? x) (vec x)
    :else (vector x)))

(map as-vector [[1] #{2 3} 1 {:a 1}])

我根据(和)Coercions中的协议名称为函数选择了名称。clojure.java.ioas-fileas-url

于 2013-07-17T22:04:35.877 回答