1

var がベクトルであることを確認する「最も簡単な」/最短の方法は何ですか? 自作のように見える可能性があります

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

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

しかし、これを行うコア機能がすでにあるのだろうか?それらの多く ( seqvecvectorlist) は、マップで失敗するか、常に適用されます。

また、この機能に最適な名前は何だろうと思います。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 に答える