2
爲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.
但是我似乎無法重現,其中的異常應該拋出的行爲。
例如,在這裏我添加了三個元素到隊列中,然後是pop
五次:根據文檔,這應該不起作用。然而,我沒有例外,我沒有。
(peek (pop (pop (pop (pop (pop (conj (conj (conj clojure.lang.PersistentQueue/EMPTY 4) 5) 6)))))))
現在我喜歡的,而不是從空隊列試圖pop
的時候,但我想明白爲什麼行爲從文檔的不同(至少從返回,而不是拋出一個異常的空隊列很多我通過閱讀文檔瞭解到)。
基本上我想知道我是否應該保護自己免受這裏的異常,或者如果我可以安全地假設空隊列總是返回一個空隊列(這與文檔相矛盾)。
因此,如果我想採取防禦措施,我可以編寫一個* safe-pop *函數,它將使用* try */* catch *,並在引發異常時返回nil? – 2013-03-21 02:33:38
我不知道試圖捕捉一個還不存在的異常(並且可能永遠不會)。我可能更傾向於測試自己的空洞,並且拋出異常或者返回零,因爲我認爲合適。 – 2013-03-21 03:06:04