clojure.core のベクタに関する var
Clojure におけるベクタは、clojure.lang.IPersistentVector インタフェースを実装したインスタンス
関数
vec: 引数の任意のコレクションをベクタに変換する
code:clj
(vec 1 2 3) ; 1 2 3
(vec '(1 2 3)) ; 1 2 3
(vec #{1 2 3}) ; 1 3 2
(vec (range 3)) ; 0 1 2
Java の配列は変更できないようにコピーして返される
vector:引数に渡された値を要素とする新しいベクタを返す
code:clj
(vector 1 2 3) ; 1 2 3
引数を渡さない場合、空のベクタを返す
code:clj
(vector) []
vector?: 引数が IPersistentVector か
code:clj
(map vector? [ #{} {}])
;; (false true false false)
(map vector? 1 :keyword nil "string")
;; (false false false false)
vector-of: 指定した基本型の新しいベクタを返す
より具体的には、第 1 引数で渡した :int、:long、:float、:double、:byte、:short、:char、:boolean のいずれかの基本型で構成された新しいベクタを返す
code:clj
(vector? (vector-of :int)) ; true
オプションで、1 つ以上の要素を指定して初期化することが可能
code:clj
(vector-of :int 1 2 3) ; 1 2 3
(vector-of :double 1.0 2.0 3.0) ; 1.0 2.0 3.0
生成されたベクタは通常のベクタと同じインタフェースを持つが、値は内部で ボクシング されない
これにより、メモリ使用量 の改善と パフォーマンス の向上が期待できる
code:clj
(type 1) ; clojure.lang.PersistentVector
(type (conj (vector-of :int 1))) ; clojure.core.Vec
#Clojure