2013-06-02 29 views
6

在「編程Clojure的」,有使用get函數在向量的例子:,是一個特定的hashmap矢量嗎?

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

我叫(DOC GET),它看起來像得到函數需要的HashMap的說法,但沒有矢量,所以我徘徊,如果矢量是某種散列表。我記得一個HashMap可以採取指數整數,並返回值匹配指數,所以我這樣做是爲了看看矢量可以做同樣的事情:

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

它沒有返回值2,這是在索引1 [ 1 2 3 4]。

這是否意味着一個向量是一個哈希表,其鍵 - 值對是索引值對?

+0

在數學上來說,矢量是* map * - 函數(數學函數)。我不知道它是如何在clojure中實現的,但我懷疑它是使用散列實現的。 clojure是動態類型的,所以它不關心什麼是實際類型。 – Elazar

回答

8

不,底層實現是不同的。

如此說來,由於在邏輯矢量做地圖索引的元件,它們在Clojure的締合結構,並且可以與getcontains?assoc(儘管assoc只從索引0到1過去的矢量的末端,可以使用使用)。他們不能與dissoc一起使用 - 這是一個「真實地圖」操作。

此外,向量在作爲函數使用時對地圖的作用不同:調用地圖作爲函數相當於將其與get一起使用,而調用向量相當於使用nth。區別在於nth在索引超出範圍(以及不可能是索引的參數,例如負數或非數字)上引發異常,而get返回nil

+0

謝謝,非常有幫助! –

相關問題