我是Clojure的新手并且正在努力学习基础知识。引起我兴趣的一件事是理解数据结构与它们使用的功能之间的相互关系。
例如,如果我创建一个新的Vector:
(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
采取了什么args以及在哪里找到有关它的文档?
我试过了:
(doc PersistentVector)
但是返回nil
。
答案 0 :(得分:4)
可以在IPersistentVector下找到文档: http://clojure.org/data_structures
特别是: 向量实现IFn,用于一个参数的invoke(),它们假定它是一个索引并且自己查找就好像是nth,即向量是它们索引的函数。
答案 1 :(得分:1)
如果将数字传递给Clojure向量,向量将使用该数字作为其自身的索引并返回该索引处的值:
user> (def my-vec [1 2 3 4 5])
#'user/my-vec
user> (my-vec 2)
3
这允许你编写这样的表达式,从vec中抓取几个键
user> (map my-vec [1 3 4])
(2 4 5)
答案 2 :(得分:-1)
答案 3 :(得分:-1)
您可以将向量视为将索引0, 1, 2, ..., N
映射到值(每个索引一个)。抽象地讲,这是映射的一种特殊情况,其中键是从0开始的整数。当用作函数时,该概念有助于查看映射和向量之间Clojure的一致性:
(<ILookup-able-collection> <key-for-lookup>)
JavaScript的作用类似,允许您使用[]
语法在数组或对象上查找。