pop
関数のドキュメントには、次のように書かれています。
user> (doc pop)
-------------------------
clojure.core/pop
([coll])
For a list or queue, returns a new list/queue without the first
item, for a vector, returns a new vector without the last item. If
the collection is empty, throws an exception.
ただし、例外をスローする必要がある動作を再現できないようです。
たとえば、ここでは 3 つの要素をキューに追加してからpop
5 回追加します。ドキュメントによると、これは機能しないはずです。ただし、例外が発生する代わりに、nil が発生します。
(peek (pop (pop (pop (pop (pop (conj (conj (conj clojure.lang.PersistentQueue/EMPTY 4) 5) 6)))))))
空のキューから行おうとしたときに例外をスローする代わりに、空のキューが返されることをとても気に入っていpop
ますが、動作がドキュメントと異なる理由を理解したいと思います(少なくともドキュメントを読んで理解したものから)。 .
pop
基本的に、ここで例外から自分自身を「保護」する必要があるかどうか、または「空のキューを実行すると常に空のキューが返される」と安全に想定できるかどうかを知りたいです(これはドキュメントと矛盾します)。