4

assoc次のように、インデックスが範囲外の場合、IndexOutOfBoundsException をスローすることがあります。

user=> (assoc [] 1 nil)
IndexOutOfBoundsException   clojure.lang.PersistentVector.assocN(PersistentVector.java:137)

インデックス 0 に値を設定しようとすると、同じ例外がスローされないのはなぜですか?

user=> (assoc [] 0 nil)
[nil]

どちらの場合も、インデックスが範囲外であるように思えます...

ありがとう

4

1 に答える 1

3

Assoc-in は assoc を使用して、指定されたキー (この場合はインデックス) で要素を変更します。Assoc-in (および assoc) は、必要なキー (またはインデックス) を作成しようとします。

ベクトルの特別な扱いについては、関連ドキュメント文字列に記載されています。

ベクトルに適用すると、インデックスに val を含む新しいベクトルを返します。注 - インデックスは <= (カウント ベクトル) でなければなりません

更新:明確にするために: 0 は空のベクター内の新しい要素の有効なインデックスですが、1 はそうではないため、欠落している例外は一貫しています。

于 2013-05-12T11:16:22.893 に答える