2012-08-10 81 views
2

我是Clojure的新手,想要學習基礎知識。有一件事讓我想起了數據結構和它們使用的功能之間的關係。Clojure數據結構函數

舉例來說,如果我創建了一個新的載體:

(def my-vec [1 2 3]) 

然後,當我嘗試調用my-vec

(my-vec) 

我得到:

ArityException Wrong number of args (0) passed to: PersistentVector clojure.lang.AFn.throwArity (AFn.java:437) 

我知道我可以通過一個參數,它似乎是呼籲get,但我怎麼知道? PersistentVector需要什麼參數以及我在哪裏可以找到關於它的文檔?

我想:

(doc PersistentVector) 

但返回nil

回答

4

的文檔可以IPersistentVector在這裏找到的: http://clojure.org/data_structures

特別是: 載體實現IFN,用於調用()一個參數,它們假定是一個索引,並期待在自己是如果由第n個,即載體是其索引的功能。

+0

這有幫助!所以當我做'(my-vec)'或'(my-vec 1)'時,它會調用''invoke()'哪個IPersistentVector'調用'nnth'? – 2012-08-10 06:32:54

+1

在代碼中找到答案:https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentVector.java#L593 – 2012-08-10 06:44:43

-1

my-vec不是一個函數,所以你應該叫:my-vec(my-vec)

嘗試:這個載體的(nth my-vec i)爲得到我個元素。

鏈接:nth

1

如果你通過一些到Clojure的載體,載體將使用該號碼作爲索引,它的自我和索引返回值:

user> (def my-vec [1 2 3 4 5]) 
#'user/my-vec 
user> (my-vec 2) 
3 

這可以讓你寫這樣的表達式這幾個搶了鑰匙A VEC

user> (map my-vec [1 3 4]) 
(2 4 5) 
+0

嗯,我想有人對你的陳述'看起來數字了'感到困惑,並導致了一個投票。請明確指出這個數字是一個索引,而不是矢量 – Ankur 2012-08-10 06:41:19

+0

固定值:)雖然我懷疑某人只是將這個問題中的所有答案都投下了票 – 2012-08-10 06:45:36

+0

其他與反對票的答案是不正確的 – Ankur 2012-08-10 06:52:51