6

「Clojure のプログラミング」では、ベクターで get 関数を使用する例があります。

(get [:a :b :c] 1)
-> :b

(doc get) を呼び出しましたが、get 関数はハッシュマップを引数として取りますが、ベクトルは取りません。ハッシュマップはインデックス整数を取り、そのインデックスに一致する値を返すことができることを覚えているので、ベクトルが同じことができるかどうかを確認するためにこれを行いました:

([1 2 3 4] 1)
-> 2

[1 2 3 4] のインデックス 1 にある値 2 を返しました。

これは、ベクトルがキーと値のペアがインデックスと値のペアであるハッシュマップであることを意味しますか?

4

1 に答える 1

8

いいえ、基本的な実装は異なります。

そうは言っても、ベクトルは論理的にインデックスを要素にマップするため、それらは Clojure の連想構造でありget、 、contains?およびで使用できますassoc(ただしassoc、ベクトルの末尾を超えて 0 から 1 までのインデックスのみを使用できます)。ただし、それらは使用できませんdissoc。これは「実際のマップ」操作です。

また、ベクトルは、関数として使用される場合、マップとは異なる動作をします。マップを関数として呼び出すことは、 で使用することと同じgetですが、ベクトルを呼び出すことは、 を使用することと同じnthです。違いは、nthは範囲外のインデックス (および負の数や非数などのインデックスではない可能性のある引数) で例外をスローするのに対し、は をget返すことnilです。

于 2013-06-02T03:25:51.277 に答える